valuecommerceのAPIを叩いて返ってくるXMLを SimpleXMLを利用してパースしようとしたら、 うまくできない部分があった。
返ってくるXMLはこれ
オプションを指定せずコンストラクタやパースする関数を実行した場合、 CDATAを取得できない。
CDATAを取得するにはLibxmlパラメータにLIBXML_NOCDATAを指定すると取得できるようになる。
$sxe = new SimpleXMLElement($xml, LIBXML_NOCDATA); $sxe = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA); $sxe = simplexml_load_file($url, "SimpleXMLElement", LIBXML_NOCDATA);
という感じ。
<vc:○○>こんなやつに挟まれてるのも$xml->children()では取得できない。
名前付きの要素を要求する際に、ローカル名と共に名前空間 URI (Uniform Resource Identifier) を指定する必要がある点です。 これは 2 段階のプロセスです。まず、children() 関数に名前空間 URI を渡すことによって、 対象とする名前空間にある子要素を要求します。次に、その名前空間での正しいローカル名を付けて要素を要求します。
$xml->children("http://valuecommerce.com/pdb/rss/");
という風にすると取得できる。
/ 金額 : ¥ 2,919
1-5
6-10