XPath 1.0:搜索包含包含的所有元素

时间:2018-12-27 16:35:35

标签: xml xpath xslt-1.0

我有一个具有以下结构的XML文档:

<books>
  <book>
    <title/>
    <author></author>
    ...
  </book>
</books>

现在,我想找到一位作者的全部book个。我使用以下XPath 1.0表达式:

/books/book[contains(author,$value)]

但这只会返回我在第一位(书本元素的第一作者)的所有书籍。

如何才能找到作者不在首位的书籍?
我正在Firefox中使用XSLT 1.0。

2 个答案:

答案 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:ifxsl: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>