simplexml_load_file() で名前空間付きのデータを取得しようとすると

面倒くさいです・・

名前空間付きとは、ノード名の前に名前空間を「:」で区切って指定した状態のことを指しています(XML の規格上それ以外ないけれど)。

SimpleXML 関数は何がシンプルかと言えば、解析した XML ファイルの内容を、連想配列の入れ子状態で PHP から扱えるようにしてくれることです。

*

しかしここで出てくる問題が、名前空間とノード名の間にある「:」です。

本来、

$xml->nodaA->nodeB

の様な感じで取得できるはずが、名前空間付きで表現した場合、次の様になります。

$xml->nodaA->ns:nodeB

ns: は PHP 言語的に NG なので、結果使えない。

SimpleXML 関数の本来の使い方で解析しようとすると、次の様にちょっと冗長になります。

$child = $xml->nodeA->children(‘XMLヘッダにある名前空間指定URI’);
echo $child->nodeB;

*

ところが、なぜか次のコードは名前空間付きでも動作します。

$xml->xpath(‘//ns:nodeB’)

XPath を知っていれば、名前空間付きであっても解析は簡単そうです。

が、自分は XPath はとうの昔に忘れてしまったので、これは置いておきます。
XML Master 受験の時ぐらいしか使わなかったので・・

*

最終的に、「: 」がすべての悪役な事はわかっているのですから、それを置換してしまうことにしました。

↓こんな感じ
$xml = simplexml_load_string(str_replace(‘:’, ‘__’, file_get_contents(‘XMLのパス’)));

文書内のすべての「:」が置換されてしまいますが、必要に応じて再度置換し直せば良いでしょう。

今回はテストプログラム作っている最中の話なので、極力面倒は省きたいので上記対応としましたが、仕事用だとそうはいかないでしょうねぇ。

10年集客し続けられるサイトを、ワードプレスで自作する9つのポイント プレゼント

【最後まで読んでくれたあなたに】

あなたは、24時間365日、自分の代わりに集客し続けてくれるWebサイトを作りたい!と思ったことはありませんか?

私はこれまで500以上のWebサイトの構築と運営のご相談に乗ってきましたが、Webサイトを作ってもうまく集客できない人には、ある一つの特徴があります。

それは、「先を見越してサイトを構築していないこと」です。
Webサイトで集客するためには、構築ではなく「どう運用するか」が重要です。

しかし、重要なポイントを知らずにサイトを自分で構築したり、業者に頼んで作ってもらってしまうと、あとから全く集客に向いていないサイトになっていたということがよく起こります。

そこで今回、期間限定で
『10年集客し続けられるサイトをワードプレスで自作する9つのポイント』
について、過去に相談に乗ってきた具体的な失敗事例と成功事例を元にしてお伝えします。

・ワードプレスを使いこなせるコツを知りたい!
・自分にピッタリのサーバーを撰びたい!
・無料ブログとの違いを知りたい!
・あとで悔しくならない初期設定をしておきたい!
・プラグイン選びの方法を知っておきたい!
・SEO対策をワードプレスで行うポイントを知りたい!
・自分でデザインできる方法を知りたい!

という方は今すぐ無料でダウンロードしてください。

期間限定で、無料公開しています。

※登録後に表示される利用条件に沿ってご利用ください

コメントを残す

雑記

前の記事

北海道の牡蠣と馬糞ウニ
雑記

次の記事

Windows XP を再インストールした