質問

いくつかのノードに次のような 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top