我有一个具有以下结构的XML文档:
<books>
<book>
<title/>
<author></author>
...
</book>
</books>
现在,我想找到一位作者的全部book
个。我使用以下XPath 1.0表达式:
/books/book[contains(author,$value)]
但这只会返回我在第一位(书本元素的第一作者)的所有书籍。
如何才能找到作者不在首位的书籍?
我正在Firefox中使用XSLT 1.0。
答案 0 :(得分:1)
此XPath,
/books/book[author[contains(.,$value)]]
将选择所有book
个带有author
子元素的元素,这些子元素的字符串值 包含子字符串 ,$value
。>
此XPath,
/books/book[author = $value]
将选择所有带有子元素book
的{{1}}元素,其子元素的字符串值 为 author
。
答案 1 :(得分:0)
在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>