我是以下的XML。
<?xml version="1.0" encoding="UTF-8"?>
<body>
<para>
<phrase>[1.001]</phrase> Arrest is for the pu</para>
<para>
<phrase>[1.002]</phrase> Brandon J said in
</para>
<para>
<phrase>[1.001]</phrase> Singapore used to be and is still
</para>
</body>
以及下面的XSL。
<xsl:template name="para" match="para">
<xsl:apply-templates select="./node()[1][self::page]" mode="first"/>
<div>
<xsl:choose>
<xsl:when test="./@align">
<xsl:attribute name="class"><xsl:text>para align-</xsl:text><xsl:value-of select="./@align"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="class"><xsl:text>para</xsl:text></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="phrase">
<xsl:choose>
<xsl:when test="contains(preceding::phrase,.)">
<xsl:text>Duplicate </xsl:text>
<xsl:value-of select ="."/>
</xsl:when>
<xsl:otherwise>
<xsl:text>Non Duplicate </xsl:text>
<xsl:value-of select ="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
我尝试将phrase
与前面phrase
中的任何一个匹配,如果匹配,我想打印Duplicate //phrase value
,否则non duplicate \\phrase value
。但是当我尝试运行这些时,它会在第三种情况下向我抛出以下错误。
XPTY0004: A sequence of more than one item is not allowed as the first argument of
contains() ("[1.001]", "[1.002]")
此处由于前一个短语中有[1.001]
,我希望它能够打印Duplicate [1.001]
。
请让我知道我哪里出错了以及如何解决。
由于
答案 0 :(得分:1)
如果您想要检查前面的contains(preceding::phrase[1],.)
是否包含当前值,请检查phrase
是否要检查前一个preceding::phrase[contains(., current())]
或phrase
。< / p>