• 締切済み

XMLのnamespaceへのアクセス方法

初めまして、PHPプログラミング初心者です。 例としまして。 <xml>  <data>   <aa:A1>    <aa:A2>     <aa:A3>これが取りたい</aa:A3>    </aa:A2>   </aa:A1>  </data> </xml> このように同じnamespaceが連続している場合の<aa:A3>までの アクセス方法をご教授願います。

みんなの回答

回答No.1

===========PHPのコード=========== <?php $doc = new DOMDocument(); $doc->resolveExternals = true; $doc->strictErrorChecking = true; $doc->recover = false; $doc->load("Q5605930-1.xml"); $xpath = new DOMXPath($doc); $xpath->registerNamespace ( "ns" , "http://himajin100000.example.com/" ); $nodes = $xpath->query("/xml/data/ns:A1/ns:A2/ns:A3"); for($i = 0;$i < $nodes->length;$i++){ print($nodes->item(0)->namespaceURI . "\n"); print($nodes->item(0)->localName . "\n"); print($nodes->item(0)->textContent . "\n"); } ?> ========用いたXMLファイル========== <xml> <data> <aa:A1 xmlns:aa="http://himajin100000.example.com/"> <aa:A2> <aa:A3>これが取りたい</aa:A3> </aa:A2> </aa:A1> </data> </xml> =======結果(何を求めたいのかよく判らなかったから適当に)======= http://himajin100000.example.com/ A3 これが取りたい =============その他=========== SimpleXMLあまり好きじゃないので書かない。DOMのみ。(初心者には簡易な記法が好まれるが、一貫性の方が重要で安易に簡易さを求めるべきではないという立場の俺としては複雑な心境である) XMLに名前空間宣言はちゃんと含めてください。 DOMXPathのregisterNamespaceの第一引数は DOMXPathのqueryメソッドで使われるXPath式のものであれば何でも良い、ということを一応示すために、元のXMLの名前空間接頭辞aaを使わないようにした。 gooはURIっぽい文字列の連続するUS-ASCIIの文字の最初と最後に不可視の文字を付け加えるので取り除いてから動かすこと。 一応xmlで始まる要素名は予約されているので、安易に使うと新しく規格が出来たときに困るかもしれないから覚悟してね

pokopoco
質問者

お礼

丁寧な回答ありがとうございます。 自分はsimplexmlで実行していた為、DOMについては全く知識が ないのですが、調べながら実装してみようと思います。 結果を明確に記述していなくてすみませんでした^^; ”これが取りたい”とういう文字列を取得したかったので、 上記の回答でばっちり分かりました^^

関連するQ&A