gpt4 book ai didi

xslt - XSL - 如何比较两组节点?

转载 作者:行者123 更新时间:2023-12-04 04:43:56 25 4
gpt4 key购买 nike

我有以下数据

<parent>
<child>APPLES</child>
<child>APPLES</child>
<child>APPLES</child>
</parent>
<parent>
<child>APPLES</child>
<child>BANANA</child>
<child>APPLES</child>
</parent>

有没有一种简单的方法来比较父节点?或者我是否必须在 for-each 中嵌套一个 for-each 并使用 position() 手动测试每个 child ?

最佳答案

XSLT 2.0 具有功能 http://www.w3.org/TR/2013/CR-xpath-functions-30-20130521/#func-deep-equal所以你可以写一个模板

<xsl:template match="parent[deep-equal(., preceding-sibling::parent[1])]">...</xsl:template>

处理那些 parent等于其前一个兄弟元素的元素 parent .

如果您想使用 XSLT 1.0 来实现,那么对于具有纯文本内容的子元素序列的简单情况,编写模板就足够了
<xsl:template match="parent" mode="sig">
<xsl:for-each select="*">
<xsl:if test="position() &gt; 1">|</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:template>

然后按如下方式使用它:
<xsl:template match="parent">
<xsl:variable name="this-sig">
<xsl:apply-templates select="." mode="sig"/>
</xsl:variable>
<xsl:variable name="pre-sig">
<xsl:apply-templates select="preceding-sibling::parent[1]" mode="sig"/>
</xsl:variable>
<!-- now compare e.g. -->
<xsl:choose>
<xsl:when test="$this-sig = $pre-sig">...</xsl:when>
<xsl:otherwise>...</xsl:otherwise>
</xsl:choose>
</xsl:template>

对于更复杂的内容,您需要优化计算“签名”字符串的模板的实现,您可能想在网上搜索,我相信 Dimitre Novatchev 已经发布了有关早期类似问题的解决方案。

关于xslt - XSL - 如何比较两组节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18482762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com