xml - XPath:匹配多个 child 之一

标签 xml xslt xpath

我有一个搜索出版物引文的小应用程序。引文采用 XML 格式,我通过 PHP 将参数传递给 XSLT,以按仪器或作者等字段进行搜索。结构如下所示:

<publications>
    <paper>
        <authors>
            <author>James Smith</author>
            <author>Jane Doe</author>
        </authors>
        <year>2010</year>
        <title>Paper 1</title>
        (more children)
    </paper>
    (more papers)
</publications>

当我在 XSLT 中调用我的模板时,我使用一个谓词来减少根据搜索条件显示的论文。因此,如果设置了 $author 参数,例如,我会这样做:

<xsl:apply-templates select="paper[contains(authors/author, $author)]" />

问题:这适用于“作者”中的第一 作者,但忽略了之后的作者。因此,在上面的示例中,搜索“Smith”会返回这篇论文,但“Doe”什么也不会返回。

如何格式化我的表达式以将所有“作者”元素考虑在内?

最佳答案

contains 函数需要一个字符串作为它的第一个参数,而不是一组节点。使用您的表达式,authors/author 的第一个结果被转换为字符串,然后传递给函数。

相反,使用独立测试每个 author 节点的谓词:

<xsl:apply-templates select="paper[authors/author[contains(., $author)]]" />

例如,参见对撒克逊人行为的解释:

关于xml - XPath:匹配多个 child 之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601710/

相关文章:

python - 如何在 lxml xpath 中使用正则表达式?

xml - XSLT : Getting max value out of derived values from source XML nodes

xml - XSLTv1.0如何与通配符或字符串模式匹配

python - 使用 Selenium 和 Python 通过单击而不使用 url 下载文件

php - 将特定字符串从 xml 导出到 mysql 表

html - 保留元素内的空间并删除元素之间的空格(空行)XSLT、CSS

java - Selenium 网络驱动程序 : How to get the dynamic id using xpath?

android - manifest.xml XML 解析错误 : not well-formed

xml - Perl 通过 HTTP 解析 XML 文件并增加几行

php - XMLHttpRequest 将 XML 发送到 PHP 服务器