我有两个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中的公共元素。
使用此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] 删除。
我来说两句