我正在尝试使用以下代码从文档中复制所有节点一次:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(@id = preceding-sibling::node()/@id and @version = preceding-sibling::node()/@version and @lang = preceding-sibling::node()/@lang)]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
但是,此代码使每个具有相同ID的node()只复制一次,无论它们是否具有相同的lang和版本。
所以如果id =“2”version =“2”且lang =“en”的节点位于id =“2”version =“1”且lang =“en”的节点之上,则节点为版本1未复制。
为什么只评估一种情况?
答案 0 :(得分:1)
请注意表达式:
node()[not(@id = preceding-sibling::node()/@id and @version = preceding-sibling::node()/@version and @lang = preceding-sibling::node()/@lang)]
选择任何没有前一个兄弟节点且具有相同id
的节点,并且没有前面的兄弟节点具有相同的version
,并且没有前面的兄弟节点与相同lang
。
与<{1}}和id
以及version
的相同组合的前一个兄弟节点不相同所有三个在一个节点中)。
我相信使用lang
将是一个更好的策略来部署在这里。