比较两个xml并获取公共节点

mnvbrtn

我有两个xml。需要阅读这两部分,并仅使用常见元素创建新的xml

第一个XML:

<Items>
    <array>
        <item name="A">
            <name>A</name>
            <indate>20141112</indate>
            <inno>2</inno>
            <status>1</status>
            <level>12</level>
            <size>.1</size>
            <text>item a text </text>
        </item>
        <item name="B">
            <name>B</name>
            <indate>20141012</indate>
            <inno>5</inno>
            <status>1</status>
            <level>13</level>
            <size>.5</size>
            <text>item b text </text>
        </item>
        <item name="C">
            <name>C</name>
            <indate>20140912</indate>
            <inno>6</inno>
            <status>1</status>
            <level>12</level>
            <size>.2</size>
            <text>item c text </text>
        </item>
       </array>
</Items>

第二个XML

<Items>
    <array>
     <item name="A">
            <name>A</name>
            <ondate>20140612</ondate>
            <onno>9</onno>
            <status>1</status>
            <level>12</level>
        </item>
        <item name="B">
            <name>B</name>
            <ondate>20140212</ondate>
            <inno>7</inno>
            <status>1</status>
            <level>13</level>
            <size>.5</size>
        </item>
        <item name="D">
            <name>D</name>
            <indate>20140712</indate>
            <inno>9</inno>
            <status>1</status>
            <level>12</level>
        </item>
       </array>
</Items>

输出应为

<Items>
    <array>
     <item name="A">
            <name>A</name>
            <status>1</status>
            <level>12</level>
        </item>
        <item name="B">
            <name>B</name>
            <status>1</status>
            <level>13</level>
            <size>.5</size>
        </item>
       </array>
</Items>

如何使用xslt 1.0做到这一点。输出应该具有两个xml中的公共元素。

基里尔·波兰丘克(Kirill Polishchuk)

使用此XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:data="data">
  <xsl:output method="xml" indent="yes"/>

  <xsl:variable name="xml2" select="document('xml2.xml')//item" />

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

  <xsl:template match="item">
    <xsl:variable name="item" select="$xml2[@name = current()/@name]"/>
    <xsl:if test="$item">
      <xsl:copy>
        <xsl:apply-templates select="@*"/>

        <xsl:for-each select="*">
          <xsl:if test="$xml2/*[name() = name(current()) and . = current()/.]">
            <xsl:apply-templates select="."/>
          </xsl:if>
        </xsl:for-each>
      </xsl:copy>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

当应用到第一个XML时,xml2.xml第二个XML(根据您的问题)将产生:

<Items>
  <array>
    <item name="A">
      <name>A</name>
      <status>1</status>
      <level>12</level>
    </item>
    <item name="B">
      <name>B</name>
      <status>1</status>
      <level>13</level>
      <size>.5</size>
    </item>
  </array>
</Items>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server中两个xml节点的数值比较

来自分类Dev

获取两个节点之间的节点

来自分类Dev

使用xslt比较来自不同xml的子节点的两个节点

来自分类Dev

比较两个Python Pandas数据框的2列并获取公共行

来自分类Dev

如何比较两个对象数组并获取公共对象

来自分类Dev

如何通过跳过几个节点来比较两个xml?

来自分类Dev

获取两个节点之间的节点子图?

来自分类Dev

比较两个JSON时忽略特定的节点/属性

来自分类Dev

比较C ++中两个BST的节点

来自分类Dev

如何在Godot中比较两个节点坐标

来自分类Dev

如何比较Java中的两个链表节点?

来自分类Dev

通过java在neo4j中查找给定两个节点的公共节点

来自分类Dev

如何计算SQL中两个节点之间的公共节点

来自分类Dev

如何使用TSQL获取和比较两个XML属性,其中XML字符串存储在字段中?

来自分类Dev

比较两个CSV文件并获取数据

来自分类Dev

执行查询以比较两个值时获取异常

来自分类Dev

SQLite比较两个表并获取实际行

来自分类Dev

比较两个日期并在android中获取结果

来自分类Dev

比较两个文件并仅获取差异-Shell脚本

来自分类Dev

比较两个列表并获取相同元素的索引

来自分类Dev

比较两个对象的属性并获取缺失项

来自分类Dev

如何比较从sqlite获取的两个List<class>?

来自分类Dev

PHP MySQL 比较两个表并获取值

来自分类Dev

使用HtmlAgilityPack从两个html节点之间获取文本

来自分类Dev

如何使用XPath在两个节点之间获取文本

来自分类Dev

从两个json文件中获取数据ajax节点

来自分类Dev

使用linq查询XML并比较两个变量

来自分类Dev

如何比较xml文件中的两个元素?

来自分类Dev

使用xslt比较两个xml文件

Related 相关文章

热门标签

归档