次の操作を実行するためにXPathクエリ文字列を把握しようとしています。私は<region>
内に含まれていない<data>
すべてのノードをつかむしたい'レベル'で反復するXPathクエリ
<root>
<data>foo1</data>
<irrelevant-node>
<data>foo1</data>
</irrelevant-node>
<irrelevant-node />
<data>foo2</data>
<irrelevant-node />
<region>
<data>bar1</data>
<data>bar2</data>
<irrelevant-node />
<region>
<data>hello1</data>
<irrelevant-node />
<data>hello2</data>
<region>
<irrelevant-node />
<data>world1</data>
</region>
</region>
<irrelevant-node />
<data>bar3</data>
<irrelevant-node>
<data>foo1</data>
</irrelevant-node>
<irrelevant-node />
</region>
<irrelevant-node />
</root>
:
は、このようなXML文書を考えます。
次に、最上位のノード<region>
をすべて取得し、それらのノード上で前のプロセスを繰り返して、相対的に動作させたいと思います。
本質的には、<data>
ノード上でその内容に基づいていくつかのプロセス(PHP)を実行して、それらを置き換えるつもりです。しかし、<region>
ノードは一種のスコープ区切り文字として機能し、指定されたスコープ内のすべての<data>
ノードを処理すると、リージョン・レベルを下げます。 <data>
ノードは、他の無関係なノード内にネストすることができます。
XPathがこれに最適なツールであるかどうかは不明ですが、これを整理しようとすると多くの問題があります。前述の通り、私はDOMクラスのPHP実装を使用しています。
/bar/region/irrelevant-node/dataは、2番目の繰り返しで "bar ..." 'data'を選択する必要がありますか? –
** @アレハンドロ**:それは正しいです。最初の反復ではすべての 'foo'データを取得する必要があります。第2の「バー」。第3の「こんにちは」など。 – Dan
良い質問、+1。説明と解決方法については私の答えを見てください。 :) –