gpt4 book ai didi

java - 修改 XML 的标签

转载 作者:行者123 更新时间:2023-11-30 11:29:52 26 4
gpt4 key购买 nike

我正在寻找动态修改非常大的 XML 文件的标签的最佳方法。

考虑以下输入 XML:

输入

<?xml version="1.0" encoding="UTF-8"?>
<rootTag>
<dictionary>
<name>field1</name>
<address>field2</address>
<gender>field3</gender>
.
.
<postcode>field30</postcode>
</dictionary>
<records>
<record>
<field id="field1">John</field>
<field id="field2">Svalbard</field>
<field id="field3">M</field>
.
.
<field id="field30">12345</field>
</record>
.
.
<record>
.
.
</record>
</records>
</rootTag>

XML 文件在顶部包含一个字典和大量记录节点,其标签链接到字典。

我想将每个记录节点中的标签替换为它们在字典中的相应值。因此,输出应如下所示:

输出

<?xml version="1.0" encoding="UTF-8"?>
<rootTag>
<records>
<record>
<name>John</name>
<address>Svalbard</address>
<gender>M</gender>
.
.
<postcode>12345</postcode>
</record>
.
.
<record>
.
.
</record>
</records>
</rootTag>

请记住,有大量的 <record>节点,在 Java 中实现这种转换的最佳方法是什么?

请注意,我只想更改标签而不是属性。

最佳答案

我同意@PeterJaloveczki 的观点,xslt 可能就是这种方式。以下可以完成工作

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

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

<xsl:template match="dictionary" />

<xsl:template match="field">
<xsl:variable name="id" select="@id" />
<xsl:variable name="tagName" select="/rootTag/dictionary/node()[. = $id]/name()" />

<xsl:element name="{if ($tagName != '') then $tagName else 'field'}">
<xsl:apply-templates select="node() | @*[name() != 'id']" />
</xsl:element>
</xsl:template>

</xsl:stylesheet>

它在某些方面得到了简化,因为 xml 示例也得到了简化,但基本上它应该可以工作。

关于java - 修改 XML 的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18077439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com