【问题标题】:XPath query for node names matching a certain patternXPath 查询与特定模式匹配的节点名称
【发布时间】:2012-02-06 21:15:10
【问题描述】:

有没有办法将 XPath 的 starts-with 函数应用于节点的名称而不是其值?我想从以下 XML 文档中选择 FOObarFOObaz 节点,而不选择 notFOO 节点:

<?xml version="1.0" encoding="UTF-8" ?>
<RootNode>
    <FOObar xmlns="http://sample.example.com">
        <value>numOne</value>
    </FOObar>
    <FOObaz xmlns="http://sample.example.com">
        <value>numTwo</value>
    </FOObaz>
    <notFOO xmlns="http://sample.example.com">
        <value>numThree</value>
    </notFOO>
</RootNode>

我知道可以使用starts-with 基于文本节点进行搜索,例如

//sample:value[starts-with(.,'num')]

有没有一种方法可以编写语法上有效的以下内容?

//sample:[starts-with(node(),'FOO')]

这个问题最初是由一个 SSCCE 提出的,但现在这个问题得到了回答,所有的代码都变得杂乱无章了。当然,它仍然可以在revision history 中使用。

【问题讨论】:

    标签: xpath


    【解决方案1】:

    使用name()local-name() 函数按名称引用节点:

    //*[starts-with(local-name(), 'FOO')]
    

    【讨论】:

    • 啊,我一直在寻找类似local-name() 的东西好几个小时了。我开始认为不存在这样的功能。仅供未来访问者参考,此答案与命名空间兼容://sample:*[starts-with(local-name(), 'FOO')]
    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 2020-09-24
    • 2015-03-22
    • 2010-10-05
    • 1970-01-01
    • 2018-08-20
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多