2012-02-06 78 views
8

有没有办法将XPath的starts-with函数应用于节点的名称而不是其值?我想从以下列表中的XML文档的FOObarFOObaz节点而不选择notFOO节点:XPath查询匹配特定模式的节点名称

<?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中可用。

回答

22

使用name()local-name()功能通过名字来指代节点:

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

啊,我一直在寻找像'本地名称()'几个小时。我开始认为没有这样的功能存在。 FYI为未来的访问者,这个答案是命名空间兼容的:''样品:* [开始(本地名称(),'FOO')]' – Pops 2012-02-06 21:30:29

+2

本地名称的W3C规范:http:// www .w3.org/TR/XPath的/#功能 - 本地名称 – Pops 2012-02-06 21:42:09