的XPath选择节点用句

的XPath选择节点用句

问题描述:

我有一个XML文件,其中一些节点在他们的名字有一个.的XPath选择节点用句

<com.site.blah> 
    <id>asdkjasd</id> 
    <com.site.testing> 
     <name>test</name> 
    </com.site.testing> 
</com.site.blah> 

如果我尝试@doc.search("/*/id").first.xpath,它返回/com.site.blah/id,但如果我那么做:@doc.search("/com.site.blah/id").first.inspect返回nil

我希望能够通过XPath查询来选择com.site.testing下的名称,但它一直拒绝我的查询。

任何想法?

(我使用的角度来说,Hpricot,如果它有差别)

+1

您是否尝试过逃避这些点在查询中? – 2010-08-09 20:33:45

+0

@Nikita - 是的,我已经尝试过'com \ .site \ .blah',这不起作用 – 2010-08-09 20:37:19

+0

你为什么不尝试'com.site.blah'? (http://codepad.org/ecVVUPCu) – Tomalak 2010-08-09 20:38:55

你的XPath库被打破。 XPath名称测试是一个QName(http://www.w3.org/TR/xpath/#NT-NameTest),它在跟随EBNF的兔子洞之后包含句点(http://www.w3.org/TR/REC-xml/#NT-NameChar)。向开发者报告错误。

作为一种变通方法,既不在评论中提到的逃逸机制是的XPath的一部分,但你可以尝试使用谓词来检查元素名称,像这样:

/*[name(.) = 'com.site.blah']/id