我有一堆XML都符合相同的架构。我想批量编辑的特定元素只出现在每个XML文件中,并且在每个文件中都有相同的xPath。
e.g. /Valid/HeaderInfo/SoftwareID
我想创建一个脚本/过程,以便我可以替换此特定元素的值(我相信它更准确地称为节点的文本值),并对文件夹中的所有XML文件执行更新。文件夹组。例如,现在它是:
<SoftwareID>12451245</SoftwareID>
我希望它是
<SoftwareID>53623745</SoftwareID>
代替。
我目前刚刚开始编程,以及一般学习XML数据 - 我需要一些关于如何开始的基本信息。最好的方法是什么?我有Altova XMLSpy,我知道它有一个脚本组件。但是,以特定的编程语言(我目前正在学习Visual Basic)这样做是否更合适?还是有一些其他软件可用于执行这些类型的批量更新?
任何能让我朝着正确方向前进的信息都会很棒!
谢谢!
更新(2013年6月26日)
XPath to FilingSoftwareId(和更新的元素名称)实际上是:
ValidFiling/FilingHeader/FilingSoftwareId
ValidFiling是XML文档的根。我使用了您提供的内容并进行了相应更新,但是当我在Altova XMLSpy中为XSL Transformation选择此XSL文件时,我的结果与原始XML文件重复。
当第二个包罗万象的模板应用于文档时,是否有可能将FilingSoftwareID的更新替换为原始值?
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes" method="xml"/>
<xsl:template match="/ValidFiling/FilingHeader/FilingSoftwareId">
<FilingSoftwareId>
<xsl:text>243523452345</xsl:text>
</FilingSoftwareId>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
再次感谢!
答案 0 :(得分:1)
我会编写一个identity-translate XSL,然后使用你想要的任何批处理技术将该XSL应用于该文件夹中的所有XML(如果你愿意,可以使用.bat,VB app)。为您想要更改的特定元素写一个匹配项,然后包含一个通用模板,按原样输出所有其他内容。
没有测试,它应该是这样的:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="//Valid/HeaderInfo/SoftwareID">
<SoftwareID>
<xsl:text>53623745</xsl:text>
</SoftwareID>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您甚至可以扩展该示例以将新值作为参数传递到转换中,这样您就不必编辑它。