复杂XML处理:利用自身及兄弟节点数据创建新元素
XML批量重构解决方案
针对你需要处理的XML文档批量修改需求,最适合的工具是XSLT(可扩展样式表语言转换),它专门用于XML文档的结构化转换,能高效处理成千上万条<Ingredients>节点。
核心修改点
- 修正错误标签:将
<ID>1</Price_ID>改为<ID>1</ID> - 替换
<Income>元素:用<Sales>元素替代,其值取自同节点下的<Price>元素内容 - 删除原
<Price>元素 - 保留其他所有元素、结构不变
实现代码(XSLT 1.0)
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 复制所有未被模板匹配的节点,保留原结构、文本、注释等 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 修正ID标签的闭合错误 --> <xsl:template match="Price_ID[../ID]"> <xsl:element name="ID"> <xsl:value-of select="../ID/text()"/> </xsl:element> </xsl:template> <xsl:template match="ID[../Price_ID]"/> <!-- 替换Income元素为Sales,取值自同层级Price --> <xsl:template match="Income"> <Sales> <xsl:value-of select="../Price/text()"/> </Sales> </xsl:template> <!-- 删除原Price元素 --> <xsl:template match="Price"/> </xsl:stylesheet>
代码说明
- 默认模板:负责复制所有未被特殊匹配的节点,保证原XML的大部分结构、注释、文本都能保留。
- ID标签修正:匹配错误的
Price_ID标签,生成正确的<ID>元素并取原<ID>的文本值,同时删除原来的错误<ID>标签。 - Income转Sales:匹配
<Income>元素,生成<Sales>元素,取值为同层级下<Price>的文本内容。 - 删除Price:匹配
<Price>元素,不做任何输出,实现删除效果。
运行方法
- 把上述XSLT代码保存为
transform.xsl文件。 - 使用XSLT处理器执行转换:
- 命令行工具(如Saxon):
java -jar saxon.jar -s:input.xml -xsl:transform.xsl -o:output.xml - 在线工具:直接上传原XML和XSLT文件,执行转换后下载结果
- 命令行工具(如Saxon):
这样就能批量处理所有<Ingredients>节点,完成你需要的重构效果。
内容的提问来源于stack exchange,提问作者RickyBelmont
相关产品推荐
相关产品推荐

