XPath ピリオド付きノード選択
質問
いくつかのノードに次のような XML ドキュメントがあります。 .
彼らの名において:
<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
所属していません StackOverflow