【问题标题】:Merge 2 XML files based on attribute values using XSLT?使用 XSLT 基于属性值合并 2 个 XML 文件?
【发布时间】:2013-02-05 07:51:41
【问题描述】:

file1.xml

<config>
 <state version="10">
  <root value="100" group="5">
     <leaf number = "2"/>
  </root>
  <root value="101" group="6">
     <leaf number = "3"/>
  </root>
 </state>
</config>

file2.xml

<config>
 <state version="10">
  <root value="100" group="5">
     <leaf number = "6"/>
  </root>
  <root value="101" group="6">
     <leaf number = "4"/>
  </root>
 </state>
</config>

输出.xml

<config>
 <state version="10">
  <root value="100" group="5">
     <leaf number = "2"/>
     <leaf number = "6"/>
  </root>
  <root value="101" group="6">
     <leaf number = "3"/>
     <leaf number = "4"/>
  </root>
 </state>
</config>

我尝试根据此处的答案编写 XSLT: How to merge 2 XML files with common nodes using XSLT?

但我不知道如何根据属性值进行比较(在这种情况下,属性值和“根”标签组?有人可以帮忙吗?

【问题讨论】:

    标签: xml xslt xml-parsing merge


    【解决方案1】:

    应该这样做:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output indent="yes" omit-xml-declaration="yes"/>
    
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="root">
        <xsl:copy>
          <xsl:apply-templates select="@* | node()" />
          <xsl:apply-templates
            select="document('file2.xml')
                  /config/state[@version = current()/../@version]
                         /root[@value = current()/@value and
                               @group = current()/@group]/*" />
        </xsl:copy>
      </xsl:template>
    
    </xsl:stylesheet>
    

    当以 file1.xml 示例作为主要输入运行时,会产生:

    <config>
      <state version="10">
        <root value="100" group="5">
          <leaf number="2" />
          <leaf number="6" />
        </root>
        <root value="101" group="6">
          <leaf number="3" />
          <leaf number="4" />
        </root>
      </state>
    </config>
    

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      相关资源
      最近更新 更多