我需要比较XSLT中两个不同循环的值



我的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/oldAddress/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中起作用。

相关内容

  • 没有找到相关文章

最新更新