java - 修改 XML 的标签

标签 java xml xslt

我正在寻找动态修改非常大的 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/

相关文章:

java - 在 UiAutomator Android 中提供事件之间的延迟

java - 斜线 ("/") 添加到我的返回 URL

java - Selenium WebDriver Java 代码无法在 eclipse 上执行 : Could not find the main class

android - 如何更改android中OptionsMenu的默认图标?

android - 从 android 上的操作栏中删除图标/ Logo

CSS 转换不起作用 Firefox for XML 文档转换为使用 XSLT 的 HTML

java - 如何检查 Date 参数是否在 Java 中具有某些值

python - 获取lxml中特定名称的所有节点?

tomcat - 使用 xsltproc(XSL 样式表)将用户添加到 tomcat-users.xml

XSL 文件中的 Java setParameter