的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,如果它有差别)
答
你的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
您是否尝试过逃避这些点在查询中? – 2010-08-09 20:33:45
@Nikita - 是的,我已经尝试过'com \ .site \ .blah',这不起作用 – 2010-08-09 20:37:19
你为什么不尝试'com.site.blah'? (http://codepad.org/ecVVUPCu) – Tomalak 2010-08-09 20:38:55