我的xml文件看起来像这样 -
<?xml version="1.0" encoding="UTF-8"?>
<root>
<old>
<Address>
<code>1</code>
</Address>
<Address>
<code>2</code>
</Address>
<Address>
<code>3</code>
</Address>
<Address>
<code>4</code>
</Address>
</old>
<new>
<Address>
<code>1</code>
</Address>
<Address>
<code>2</code>
</Address>
<Address>
<code>5</code>
</Address>
</new>
</root>
我需要将旧/地址/代码与新/地址/代码和反之亦然进行比较。如果值匹配,则我需要将其限制为否则将其打印。因此,最终输出将是:
<City>
<countryCode>1122345</countryCode>
</City>
in XSLT 2.0 您可以尝试此
<xsl:template match="root">
<City>
<countryCode>
<xsl:choose>
<xsl:when test="deep-equal(old/*, new/*)">
<xsl:value-of select="old//code"/>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="//code">
<xsl:sort select="."/>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</countryCode>
</City>
</xsl:template>
如果您希望它简单(并假定Address/old
的原始顺序并不重要),请忘记比较,而只是将Address/old
和Address/new
的所有code
串联并进行排序:
<xsl:template match="root">
<City>
<countryCode>
<xsl:for-each select="(old|new)/Address/code">
<!-- or, if you like it really dirty: //code -->
<xsl:sort/>
<xsl:apply-templates/>
</xsl:for-each>
</countryCode>
</City>
</xsl:template>
这将产生给定示例的所需结果,并在XSLT 1.0中起作用。