【问题标题】:Transform XML Attributes to Tags ( Nodes ) without using XSLT in Java在 Java 中不使用 XSLT 将 XML 属性转换为标签(节点)
【发布时间】:2018-10-12 00:25:33
【问题描述】:

我有两个 XML——一个有标签,另一个有这些标签作为属性和值。我需要合并这两个xml。我需要在不使用 xslt 的情况下使用 Java 来完成。我将需要合并不同的 xml 对,因此我想编写一个通用程序来完成它。我该怎么做?我发现的所有示例都使用 XSLT。

更新:添加示例

示例输入 1 - XML 作为节点

<PROPERTIES>
    <PROPERTY>
        <ADDRESS>
            <AddressLineText></AddressLineText>
            <CityName></CityName>
            <PostalCode></PostalCode>
            <StateCode></StateCode>
        </ADDRESS>
    </PROPERTY>
</PROPERTIES>

示例输入 2 - XML 作为属性

    <DocData DescriptorID="95" Value="70056" Name="PostalCode"/>
    <DocData DescriptorID="81" Value="LA" Name="StateCode"/>
    <DocData DescriptorID="15" Value="GRETNA" Name="CityName"/>
    <DocData DescriptorID="49" Value="721 SAMPLE DR" Name="AddressLineText"/>

样本预期输出

<PROPERTIES>
    <PROPERTY>
        <ADDRESS>
            <AddressLineText>721 SAMPLE DR</AddressLineText>
            <CityName>GRETNA</CityName>
            <PostalCode>70056</PostalCode>
            <StateCode>LA</StateCode>
        </ADDRESS>
    </PROPERTY>
</PROPERTIES>

我想要做的是 - 合并上述两个 XML - 并将属性中的值更新为匹配节点的文本值。为此,我认为我应该先将带属性的 XML 转换为带节点的 XML,然后尝试合并。

如果您有任何其他建议,我想尝试一下。

由于标签信息在我需要做的所有对中都不相同,我想避免 xsl。

谢谢

【问题讨论】:

  • 您要避免的 xslt 是什么?
  • 我以前没用过xslt,但我想,我必须使用属性名,所以不能让它成为一个通用的过程。那是对的吗?我想编写一个实用程序来读取属性名称并为属性标签创建一个子节点
  • 请显示输入和所需输出的样本。你的描述很混乱。每个 XML 都有标签,所以如果你能告诉我们的关于 XML 的唯一信息就是它有标签,那么我们真的不太了解。您发现的所有示例都使用 XSLT 并不奇怪,因为这是完成这项工作的最佳工具;使用劣质工具向人们寻求解决方案会限制您获得的响应。
  • @Michael Kay - 我用输入和预期输出的详细信息更新了问题。
  • 想知道投票的细节/原因

标签: java xml attributes transform


【解决方案1】:

恐怕我没有时间和耐心使用 Java DOM 接口做一个解决方案,但是这里有一个 XSLT 解决方案,以防你改变主意。

<xsl:transform xmlns="http://www.w3.org/1999/XSL/Transform"
  version="3.0" expand-text="yes">
  <xsl:mode on-no-match="shallow-copy"/>
  <xsl:template match="*[not(child::node())]">
     <xsl:copy>{doc('doc2.xml')//DocData[@Name=name(current())]/@Value}</xsl:copy>
  </xsl:template>
</xsl:transform>

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2013-02-17
    • 2014-07-16
    • 2020-11-25
    相关资源
    最近更新 更多