各位论坛成员,
我是 Xpath 新手,有以下问题。例如,假设我有 300 个单独的 XML 文件,并且我需要进行全局文本更改,该更改可能仅影响其中的 40 个 XML 文件。是否可以使用 Xpath 在所有 300 个 XML 文件中执行查找和替换操作?比方说,我需要全局更改的单词是“LBRT Assembly”更改为“LBRS assembly”。 Xpath 是否提供执行此类操作的能力?我知道 Xpath 擅长查询 XML 元素。但是,它也可以执行查找和替换操作吗?可以用来帮助编写复杂的 Xpath 查询命令的最佳应用程序是什么?任何意见都将受到极大的欢迎。提前致谢。
XPath 无法修改 XML 文件。为此,您需要 XSLT 或 XQuery。
如果这确实是一个全局更改(也就是说,如果您想更改此文本,无论它出现的上下文如何),那么我会非常倾向于使用文本编辑器来完成此操作:这违背了我总是给出的建议说当处理 XML 数据时你应该使用 XML 工具。但是,如果查找要更改的文本确实取决于 XML 上下文,那么我会编写一个小 XSLT 2.0 程序来完成此操作:可能大约有十几行。核心是:
(a) 复制元素不变的标准身份模板
<xsl:template match="*">
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="node()"/>
</xsl:template>
(b) 驱动处理的东西:
<xsl:template name="main">
<xsl:apply-templates select="collection('my/dir/?select=*.xml')"/>
</xsl:template>
(e) 为每个输入文档创建新输出文档的模板
<xsl:template match="/">
<xsl:result-document href="{replace(document-uri(.), '/dir/', '/outdir/')}">
<xsl:apply-templates/>
</xsl:result-document>
</xsl:template>
(d) 修改文本节点的模板
<xsl:template match="text()">
<xsl:value-of select="replace(., 'xxx', 'yyy')"/>
</xsl:template>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)