2017-05-04 11 views
0

simplexml_load_string()new SimpleXMLElement()の両方をXML APIからPHPで使用してXMLデータを解析しようとしましたが、CDATAコンテンツの解析中に問題が発生しています。 PHPの上記の関数またはインスタンスを使用すると、CDATAをノードのコンテンツとして解析する必要があります(SimpleXMLElementからstringとしてタイプキャストするか、またはLIBXML_NOCDATAフラグを使用してタイプキャストします)が、そうではありません。その代わりに、データは<![CData[2801086]]>のように出ています(これはブラウザでエコーされて表示されないので表示されません)XML APIからCDATAのコンテンツを取得できません

ここでは、APIフィード内のジョブの位置を含むスニペットいくつかのコンテンツを削除しました):

<position> 
    <Id><![CData[2801086]]></Id> 
    <url> 
    <![CData[http://foo.bar.co.uk/ViewVacancy.aspx?2801086-foo]]> 
    </url> 
    <JobReference><![CData[VAC-00117]]></JobReference> 
    <JobTitle><![CData[Foo Bar]]></JobTitle> 
    <County><![CData[Nottinghamshire]]></County> 
    <Town><![CData[Nottingham]]></Town> 
    <Postcode><![CData[NG11 0EE]]></Postcode> 
</position> 
+1

CDATAは大文字で書く必要があります。あなたが書いた方法では、整形式のXMLではありません。 –

+0

フィードバックマイケルに感謝します。ええ、私は知っている(これは以下に答えている)。残念ながら自分で書かれていないので、サービスを提供する開発者に知らせる必要があります – willsquire

答えて

0

これは数時間かかるので、他の誰かに苦痛を救うために投稿すると思いました。 PHPのsimplexml_load_string()new SimpleXMLElement()はともにCdataを大文字にする必要があります(つまりCDATA)。ウェブブラウザ(Chrome)はそれがなくても幸せでした。異なるバージョンで変更される可能性があり、私はこれを書いている時点でPHP 7を使用しています。大文字にされると、それは期待どおりにCdataラッピングなしで現れました。

+0

ChromeでHTMLとして解析されましたか? HTMLは大文字と小文字を区別しません。 – ThW

+0

それはそれを説明します。ブラウザがそれを解釈し、PHPが例外をスローしなかったので、しばらく私の目はそれを覆っていました。 – willsquire

関連する問題