0

次の XML ドキュメントがあります。

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\" xmlns:apps=\"http://schemas.google.com/apps/2006\" xmlns:gd=\"http://schemas.google.com/g/2005\">
  <apps:property name=\"memberId\" value=\"Tom\"/>
</atom:entry>

私がやろうとしているのは、apps:property ノードを取得することだけです。しかし、私が LibXML で試したことはすべて何も返しません。

LibXML::XML::XPath については、こちらの LibXML ドキュメントを読んでください。ルート ノードで定義されているため、2 つの名前空間を指定する必要はないと思います。

これが私が試したことです:

@document.find('/apps:property')
@document.find('//apps:property')
@document.find('/atom:entry/apps:property')
@document.find('//atom:entry/apps:property')
@document.find('/property')
@document.find('/atom:entry')
@document.find('//property')
@document.find('/entry')

上記のいずれも、指定されたドキュメントの結果を返しません。アトムとアプリの名前空間定義のさまざまな組み合わせでもそれらをすべて試しましたが、効果がないようです。

誰かが私が見逃しているに違いない非常に単純なことを教えてくれれば、それは大歓迎です。


この問題は、ドキュメントがファイルから読み取られるのではなく、動的に作成されることに起因することが判明しました。

ドキュメントをファイルに書き込んで読み込むと、検索できます。ドキュメントを作成し、ルート要素を作成し、プログラムで子を追加すると、検索しようとするたびにnilになりますが、奇妙なことに、それぞれがうまく機能します。ドキュメントを検索する前に、ドキュメントを「ファイナライズ」するか、何か他の愚かなことをする必要がありますか?

4

1 に答える 1

0

ドキュメントを明示的に解析すると、検索できます。

ドキュメントの作成時に解析ツリーを生成できない限り、それが解決策になる可能性があります。

私が推測するコードを見てみましょう。

于 2012-06-14T15:03:47.677 に答える