Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

XML 教程

XML 首页 XML 简介 XML 如何使用 XML 树 XML 语法 XML 元素 XML 属性 XML 命名空间 XML 显示 XML HttpRequest XML 解析器 XML DOM XML XPath XML XSLT XML XQuery XML XLink XML 验证器 XML DTD XML 架构 XML 服务器 XML 例子 XML 测试 XML 证书

XML AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用 AJAX 例子

XML DOM

DOM 简介 DOM 节点 DOM 访问 DOM 节点信息 DOM 节点列表 DOM 遍历 DOM 导航 DOM 获取值 DOM 修改节点 DOM 删除节点 DOM 替换节点 DOM 创建节点 DOM 添加节点 DOM 克隆节点 DOM 例子

XPath 教程

XPath 简介 XPath 节点 XPath 语法 XPath 轴 XPath 运算符 XPath 例子

XSLT 教程

XSLT 简介 XSL 语言 XSLT 转换 XSLT <template> XSLT <value-of> XSLT <for-each> XSLT <sort> XSLT <if> XSLT <choose> XSLT 应用 客户端上的 XSLT 服务器上的 XSLT XSLT 编辑 XML XSLT 例子

XQuery 教程

XQuery 简介 XQuery 例子 XQuery FLWOR XQuery HTML XQuery 术语 XQuery 语法 XQuery 添加 XQuery 选择 XQuery 函数

XML DTD

DTD 简介 DTD 构建块 DTD 元素 DTD 属性 DTD 元素与属性 DTD 实体 DTD 例子

XSD 架构

XSD 简介 XSD 如何操作 XSD <schema> XSD 元素 XSD 属性 XSD 限制 XSD 复杂元素 XSD 空元素 XSD 仅元素 XSD 仅文本 XSD 混合 XSD 指示符 XSD <any> XSD <anyAttribute> XSD 替换 XSD 例子

XSD 数据类型

XSD 字符串 XSD 日期/时间 XSD 数值 XSD 其他 XSD 参考

Web 服务

XML 服务 XML WSDL XML SOAP XML RDF XML RSS

参考

DOM 节点类型 DOM 节点 DOM 节点列表 DOM NamedNodeMap DOM 文档 DOM 元素 DOM 属性 DOM 文本 DOM CDATA DOM 注释 DOM XMLHttpRequest DOM 解析器 XSLT 元素 XSLT/XPath 函数

XSLT - 编辑 XML


存储在 XML 文件中的数据可以通过互联网浏览器进行编辑。


打开、编辑和保存 XML

现在,我们将演示如何打开、编辑和保存存储在服务器上的 XML 文件。

我们将使用 XSL 将 XML 文档转换为 HTML 表单。XML 元素的值将写入 HTML 表单中的 HTML 输入字段。HTML 表单是可编辑的。编辑数据后,数据将被提交回服务器,并且 XML 文件将被更新(我们将展示 PHP 和 ASP 的代码)。


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>

查看 XML 文件.

然后,看一下下面的样式表(“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>工具信息(编辑):</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="提交" />
  <input type="reset" id="btn_res" name="btn_res" value="重置" />
  </form>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

查看 XSL 文件.

上面的 XSL 文件遍历 XML 文件中的元素,并为每个 XML “field” 元素创建一个输入字段。XML “field” 元素的 “id” 属性的值被添加到每个 HTML 输入字段的 “id” 和 “name” 属性中。每个 XML “value” 元素的值被添加到每个 HTML 输入字段的 “value” 属性中。结果是一个可编辑的 HTML 表单,其中包含 XML 文件中的值。

然后,我们还有第二个样式表:“tool_updated.xsl”。这是将用于显示更新后的 XML 数据的 XSL 文件。此样式表不会生成可编辑的 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>更新后的工具信息:</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>

查看 XSL 文件.



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 - 这在任何浏览器中都能正常工作。


ASP 文件

上面 “tool.xsl” 文件中的 HTML 表单的 action 属性值为 “edittool.asp”。

“edittool.asp” 页面包含两个函数:loadFile() 函数加载并转换 XML 文件以进行显示,updateFile() 函数将更改应用于 XML 文件

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
'加载 XML 和 XSL 文件
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
'转换文件
Response.Write(xmlDoc.transformNode(xslDoc))
end function

function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
'加载 XML 文件
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)

'将 rootEl 变量设置为根元素
Set rootEl = xmlDoc.documentElement

'遍历表单集合
for i = 1 To Request.Form.Count
  '消除表单中的按钮元素
  if instr(1,Request.Form.Key(i),"btn_")=0 then
    'selectSingleNode 方法查询 XML 文件以获取与查询匹配的单个节点
    '此查询请求值为 field 元素的子元素,并且该 field 元素具有与
    '匹配的 id 属性
    '表单集合中当前键的值。当匹配时 -
    '将文本属性设置为表单集合中当前字段的值。
    '。
    set f = rootEl.selectSingleNode("field[@id='" & _
    Request.Form.Key(i) & "']/value")
    f.Text = Request.Form(i)
  end if
next

'保存修改后的 XML 文件
xmlDoc.save xmlfile

'释放所有对象引用
set xmlDoc=nothing
set rootEl=nothing
set f=nothing

'使用样式表加载修改后的 XML 文件,
'允许客户端查看编辑后的信息
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function

'如果表单提交,则更新 XML 文件并显示结果
' - 否则,转换 XML 文件以进行编辑
if Request.Form("btn_sub")="" then
  loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
  updateFile server.MapPath("tool.xml")
end if
%>

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.