XSLT 编辑XML

  • 定义

    可以从 Internet 浏览器编辑 XML 文件中存储的数据。
    现在,我们将展示如何打开,编辑和保存存储在服务器上的XML文件。
    我们将使用 XSL 将 XML 文档转换为 HTML 表单。 XML 元素的值将以 HTML 形式写入 HTML 输入字段。 HTML 表单是可编辑的。 编辑数据后,数据将被提交回服务器,并且XML文件将被更新(我们将显示PHP的代码)。
  • XML文件和XSL文件

    首先,看一下XML文档("tool.xml"):
    <?xml version="1.0" encoding="UTF-8"?>
    <tool>
      <field id="prodName">
        <value>HAMMER HG2606</value>
      </field>
      <field id="prodNo">
        <value>32456240</value>
      </field>
      <field id="price">
        <value>$30.00</value>
      </field>
    </tool>
    然后,看看以下 tool.xsl 样式表:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <form method="post" action="edittool.asp">
    <h2>Tool Information (edit):</h2>
    <table border="0">
      <xsl:for-each select="tool/field">
      <tr>
        <td><xsl:value-of select="@id"/></td>
        <td>
        <input type="text">
        <xsl:attribute name="id">
          <xsl:value-of select="@id" />
        </xsl:attribute>
        <xsl:attribute name="name">
          <xsl:value-of select="@id" />
        </xsl:attribute>
        <xsl:attribute name="value">
          <xsl:value-of select="value" />
        </xsl:attribute>
        </input>
        </td>
      </tr>
      </xsl:for-each>
    </table>
    <br />
    <input type="submit" id="btn_sub" name="btn_sub" value="Submit" />
    <input type="reset" id="btn_res" name="btn_res" value="Reset" />
    </form>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>
    上面的 XSL 文件循环遍历 XML 文件中的元素,并为每个XML "field" 元素创建一个输入字段。 XML "field" 元素的 "id" 属性的值将添加到每个 HTML 输入字段的 “id” 和 "name" 属性中。 每个 XML "value" 元素的值都添加到每个 HTML 输入字段的 "value" 属性中。 结果是一个可编辑的 HTML 表单,其中包含 XML 文件中的值。
    然后,我们有了第二个样式表:"tool_updated.xsl"。 这是 XSL 文件,将用于显示更新的 XML 数据。 此样式表不会产生可编辑的 HTML 表单,而是一个静态 HTML 表:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
      <html>
      <body>
      <h2>Updated Tool Information:</h2>
      <table border="1">
        <xsl:for-each select="tool/field">
        <tr>
          <td><xsl:value-of select="@id" /></td>
          <td><xsl:value-of select="value" /></td>
        </tr>
        </xsl:for-each>
      </table>
      </body>
      </html>
    </xsl:template>
    </xsl:stylesheet>
  • PHP 文件

    在上方的 "tool.xsl" 文件中,将HTML表单的 action 属性更改为 "edittool.php"。
    "edittool.php" 页面包含两个函数:loadFile() 函数加载并转换 XML 文件以供显示,而 updateFile() 函数将更改应用于 XML 文件:
    <?php
    function loadFile($xml, $xsl)
    {
    $xmlDoc = new DOMDocument();
    $xmlDoc->load($xml);
    
    $xslDoc = new DOMDocument();
    $xslDoc->load($xsl);
    
    $proc = new XSLTProcessor();
    $proc->importStyleSheet($xslDoc);
    echo $proc->transformToXML($xmlDoc);
    }
    
    function updateFile($xml)
    {
    $xmlLoad = simplexml_load_file($xml);
    $postKeys = array_keys($_POST);
    
    foreach($xmlLoad->children() as $x)
    {
      foreach($_POST as $key=>$value)
      {
        if($key == $x->attributes())
        {
          $x->value = $value;
        }
      }
    }
    
    $xmlLoad->asXML($xml);
    loadFile($xml,"tool_updated.xsl");
    }
    
    if($_POST["btn_sub"] == "")
    {
      loadFile("tool.xml", "tool.xsl");
    }
    else
    {
      updateFile("tool.xml");
    }
    ?>
    提示:如果您不知道如何编写 PHP,请学习我们的 PHP教程
    注意:我们正在执行转换,并将更改应用到服务器上的 XML 文件。 这是跨浏览器的解决方案。 客户端只会从服务器获取 HTML- 可以在任何浏览器中使用。