我有一个具有以下结构的XML文档:
<books>
<book>
<title/>
<author></author>
...
</book>
</books>
现在我想找到一个作者的所有book
。我使用以下 XPath 1.0 表达式:
/books/book[contains(author,$value)]
但这只会向我返回作者排在第一位的所有书籍(书籍元素的第一个作者元素)。
我怎样才能找到作者不是第一名的书?
我在Firefox中使用XSLT 1.0。
这个XPath,
/books/book[author[contains(.,$value)]]
将选择具有字符串值包含子字符串的 author
子元素的所有book
元素,$value
.
这个XPath,
/books/book[author = $value]
将选择具有字符串值为 $value
的 author
子元素的所有book
元素。
在 XSLT-1.0 中,不能在模板匹配表达式中使用变量。
它只是不起作用,因此要么对值进行硬编码,要么将其放入xsl:if
或xsl:choose
中。
所以
<xsl:template match="/books/book">
<xsl:if test="contains(author/text(),$value)">
CONDITION Fulfilled!
</xsl:if>
</xsl:template>
确实有效,但将其用作谓词
<xsl:template match="/books/book[contains(author/text(),$value)]">
CONDITION won't work!
</xsl:template>
不会,除非您对匹配的 VALUE 进行硬编码,例如
<xsl:template match="/books/book[contains(author/text(),'VALUE')]">
CONDITION won't work!
</xsl:template>