- ベストアンサー
XMLで同名異種のタグを区別してコンテンツを取得する方法
- XMLで同名異種のタグを区別してコンテンツを取得する方法について解説します。
- getElementByTagNameを使用して<neko>タグの中身を取得する際、<animal>の中にある<neko>の中身を取得する方法を紹介します。
- DOMを使用することで、<neko>タグの中身を取得することが可能です。正規表現は最終手段として使用されることがあります。
- みんなの回答 (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 ペルシャ ぶち
お礼
XPathを使う方法があるんですね、ありがとうございます。 おかげさまで、なんとかなりそうです。 あと1つ、お聞きしたいのですが、 <neko>までの階層が深い場合、 /root//animal/neko のようなパス表記は、どのようにすべきでしょうか? <root> <ikimono> <honyurui> <ke_bukai> <nekoka> <animal> <neko>ペルシャ</neko> ~~略~~ </root> なんて場合です。 さらに、実際のXMLの階層構造は複雑で、 ルートから見て、目的の要素が、何階層下かが分かりにくいなんて場合を想定して 回答頂けると助かります。 宜しくお願い致します。