查找&的Xpath更换?

时间:2015-06-14 04:25:35

标签: xml xpath replace

论坛成员, 我是Xpath的新手,有以下问题。比方说,我有300个单独的XML文件,我需要进行全局文本更改,这可能只会影响40个XML文件。是否可以使用Xpath执行查找&在所有300个XML文件中替换操作?比方说,我需要全球改变的话是这些词,“LBRT Assembly”改为“LBRS assembly”。 Xpath是否提供执行此类操作的能力?我知道Xpath擅长查询XML元素。但是,它还可以执行查找和替换操作吗?什么是可用的最佳应用程序,可以帮助编写复杂的Xpath查询命令?任何意见都将受到极大的欢迎。提前致谢。

1 个答案:

答案 0 :(得分:5)

XPath无法修改XML文件。为此你需要XSLT或XQuery。

如果这确实是一个全局性的变化(也就是说,如果你想改变这个文本而不管它出现的上下文)那么我会非常倾向于使用文本编辑器来做这件事:这违背了我的建议总是在处理XML数据时给出哪些说法,你应该使用XML工具。但是如果找到要更改的文本取决于XML上下文,我会编写一个小的XSLT 2.0程序来执行它:它可能大约有十几行。核心将是:

(a)标准身份模板,以复制元素不变

<?php
echo $_POST["field1"];
?>

(b)推动处理的事情:

<xsl:template match="*">
  <xsl:copy-of select="@*"/>
  <xsl:apply-templates select="node()"/>
</xsl:template>

(e)为每个输入文档创建新输出文档的模板

<xsl:template name="main">
  <xsl:apply-templates select="collection('my/dir/?select=*.xml')"/>
</xsl:template>

(d)修改文本节点的模板

<xsl:template match="/">
  <xsl:result-document href="{replace(document-uri(.), '/dir/', '/outdir/')}">
    <xsl:apply-templates/>
  </xsl:result-document>
</xsl:template>