• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:XMLにおける同名異種のタグを区別して、そのコンテンツを取り出すには?)

XMLで同名異種のタグを区別してコンテンツを取得する方法

このQ&Aのポイント
  • XMLで同名異種のタグを区別してコンテンツを取得する方法について解説します。
  • getElementByTagNameを使用して<neko>タグの中身を取得する際、<animal>の中にある<neko>の中身を取得する方法を紹介します。
  • DOMを使用することで、<neko>タグの中身を取得することが可能です。正規表現は最終手段として使用されることがあります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

=============Q5969855-1.xml================ <?xml version='1.0'?> <root> <animal> <neko>ペルシャ</neko> </animal> <pet> <neko>三毛</neko> </pet> <x> <animal> <neko>ぶち</neko> </animal> </x> </root> ==============Q5969855-1.php050302================ <?php header("Content-Type:text/plain;charset=UTF-8"); $doc = new DOMDocument(); $doc->load("Q5969855-1.xml"); $xpath = new DOMXPath($doc); $nodelist = $xpath->query("/root/animal/neko"); print("a\n"); for ($i = 0; $i < $nodelist->length; $i++) { echo $nodelist->item($i)->textContent . "\n"; } print("b\n"); $nodelist = $xpath->query("/root//animal/neko"); for ($i = 0; $i < $nodelist->length; $i++) { print($nodelist->item($i)->textContent . "\n"); } ?> ===================出力結果================= a ペルシャ b ペルシャ ぶち

ict-km48tz
質問者

お礼

XPathを使う方法があるんですね、ありがとうございます。 おかげさまで、なんとかなりそうです。 あと1つ、お聞きしたいのですが、 <neko>までの階層が深い場合、 /root//animal/neko のようなパス表記は、どのようにすべきでしょうか? <root>  <ikimono>   <honyurui>    <ke_bukai>     <nekoka>      <animal>       <neko>ペルシャ</neko> ~~略~~ </root> なんて場合です。 さらに、実際のXMLの階層構造は複雑で、 ルートから見て、目的の要素が、何階層下かが分かりにくいなんて場合を想定して 回答頂けると助かります。 宜しくお願い致します。

関連するQ&A