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() > 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已經張貼在早期,類似的問題的解決方案。
你想要什麼輸出? –
在我的數據中有30多個節點,我正在通過查看每個節點。我想知道當前父項的子節點何時與以前的父項不同。 E.G,它可以是X X X,然後是X X X,然後是Y X Y.我想知道這是什麼時候發生的。 –