加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – XPath:匹配多个子节点中的一个

发布时间:2020-12-16 23:10:53 所属栏目:百科 来源:网络整理
导读:我有一个小应用程序搜索出版物引用.引用是 XML格式,我通过 PHP将参数传递给XSLT,以便按照乐器或作者等字段进行搜索.结构如下所示: publications paper authors authorJames Smith/author authorJane Doe/author /authors year2010/year titlePaper 1/title
我有一个小应用程序搜索出版物引用.引用是 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的第一个结果将转换为字符串,然后传递给函数.

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

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

例如,请参阅撒克逊人行为的这种解释:

> http://saxon.sourceforge.net/saxon6.5.3/expressions.html#StringExpressions

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读