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



我有一个具有以下结构的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]

将选择具有字符串值 $valueauthor 子元素的所有book元素。

在 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>

相关内容

  • 没有找到相关文章

最新更新