如何搜索和替换10000个XML文件的XML标记和条目
我需要更新10000多个文件的XML 我是一个新手程序员,所以如果可能的话,我更喜欢使用开箱即用的东西(现有的解决方案?)。如果不是,我不怕学习和尝试新事物。我在大学里修了一门课程(编程逻辑),想让我的脚湿一湿,但这当然不会带来立竿见影的效果 所有文件都位于它们自己的基于序列号的目录中。 每个文件都称为83xyzec.xml 这些XML文件中的每一个都有两个需要搜索的标记/内容,并删除所有实例 例如:如何搜索和替换10000个XML文件的XML标记和条目,xml,windows,macos,xml-parsing,Xml,Windows,Macos,Xml Parsing,我需要更新10000多个文件的XML 我是一个新手程序员,所以如果可能的话,我更喜欢使用开箱即用的东西(现有的解决方案?)。如果不是,我不怕学习和尝试新事物。我在大学里修了一门课程(编程逻辑),想让我的脚湿一湿,但这当然不会带来立竿见影的效果 所有文件都位于它们自己的基于序列号的目录中。 每个文件都称为83xyzec.xml 这些XML文件中的每一个都有两个需要搜索的标记/内容,并删除所有实例 例如: <mediaFile> content 123 </mediaFile>
<mediaFile>
content 123
</mediaFile>
<image>
image info 123
</image>
内容123
图像信息123
然后,我还需要在另一个标记中重新插入不同的标记/内容。
例如:
<track>
Need to insert>> <action>UPDATE</action>
extra stuff etc
more stuff
even more
</track>
需要插入>>更新
额外的东西等
更多的东西
甚至更多
最后,我需要在标记中输入一个文本字符串,但在末尾。例如:
<right type="labelDownload">Y</right>
</track>
Y
如果有任何建议,我将不胜感激。Windows平台优先。
谢谢大家! XSLT允许您以与英语描述非常相似的形式表达转换规则 您从一个模板规则开始,该规则说“默认情况下,当您点击一个元素时,复制它并处理它的子元素”:
XSLT允许您以与英语描述非常相似的形式表达转换规则 您从一个模板规则开始,该规则说“默认情况下,当您点击一个元素时,复制它并处理它的子元素”:
您还看过XProc吗?您还看过XProc吗?看看XSLT。它非常适合这种类型的工作,但是你可能需要花几个小时学习基础知识。DeepYellow,这就是我的google foo向我展示的,这就是你的意思吗?从外观上看,XSLT是XML的一种格式化方案。虽然我认为这可能是为方案设置配置的一个良好开端,但我仍然不确定解析xml、编辑和保存10000个文件所需的脚本/应用程序/程序。XSLT标准的主要驱动程序之一Michael Kay很荣幸地回答了您的问题。认真对待他的回答。XSLT是关于使用简单规则(称为模板)转换XML的,您所描述的内容可以很容易地用几个模板编写(如Michael Kay所示)。它非常适合这种类型的工作,但是你可能需要花几个小时学习基础知识。DeepYellow,这就是我的google foo向我展示的,这就是你的意思吗?从外观上看,XSLT是XML的一种格式化方案。虽然我认为这可能是为方案设置配置的一个良好开端,但我仍然不确定解析xml、编辑和保存10000个文件所需的脚本/应用程序/程序。XSLT标准的主要驱动程序之一Michael Kay很荣幸地回答了您的问题。认真对待他的回答。XSLT是关于使用简单规则(称为模板)转换XML的,您所描述的内容可以很容易地用几个模板编写(如Michael Kay所示)。昨晚我在做额外的阅读,看起来撒克逊人需要。(我还没有创建一个“可用”的程序)非常感谢您花时间向我提供有关我的问题的具体细节。我会试试这个,让你知道第一个怎么样:)谢谢你,迈克尔。昨晚我在做额外的阅读,看起来撒克逊人需要。(我还没有创建一个“可用”的程序)非常感谢您花时间向我提供有关我的问题的具体细节。我会试试这个,让你知道第一个是怎样的:)
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="mediaFile | image"/>
<xsl:template match="track">
<xsl:copy>
<action>UPDATE</action>
<xsl:apply-templates/>
<right type="labelDownload">Y</right>
</xsl:copy>
</xsl:template>
<xsl:template name="main">
<xsl:for-each select="collection('.?select=*.xml')">
<xsl:result-document href="{tokenize(document-uri(.), '/')[last()]">
<xsl:apply-templates/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
java net.sf.saxon.Transform -xsl:stylesheet.xsl -it:main -o:../output/result.xml