XPath查询与特定模式匹配的节点名称

Pop*_*ops 11 xpath

有没有办法将XPath的starts-with函数应用于节点的名称而不是它的值?我想选择的FOObar,并FOObaz从以下XML文档节点而不选择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>
Run Code Online (Sandbox Code Playgroud)

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

//sample:value[starts-with(.,'num')]
Run Code Online (Sandbox Code Playgroud)

有没有办法编写语法上有效的以下内容?

//sample:[starts-with(node(),'FOO')]
Run Code Online (Sandbox Code Playgroud)

这个问题最初是随着SSCCE提出的,但现在问题得到了解答,所有代码都只是杂乱无章.当然,它仍然可以在修订历史中使用.

Way*_*ett 26

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

//*[starts-with(local-name(), 'FOO')]
Run Code Online (Sandbox Code Playgroud)

  • `local-name`的W3C规范:http://www.w3.org/TR/xpath/#function-local-name (2认同)