web-dev-qa-db-ja.com

PHP:<![CDATA [SimpleXMLElementで処理する方法?

これらのCDATAタグを含むドキュメントでSimpleXMLElementを使用すると、コンテンツは常にNULLであることに気付きました。どうすれば修正できますか?

また、ここでXMLに関するスパムを送信して申し訳ありません。私は数時間前からXMLベースのスクリプトを動作させようとしています...

<content><![CDATA[Hello, world!]]></content>

「SimpleXMLElement cdata」を検索した場合、Googleで最初のヒットを試みましたが、うまくいきませんでした。

92
Angelo

おそらく正しくアクセスしていないでしょう。直接出力することも、文字列としてキャストすることもできます。 (この例では、とにかくエコーが自動的に行うため、キャストは不要です)

$content = simplexml_load_string(
    '<content><![CDATA[Hello, world!]]></content>'
);
echo (string) $content;

// or with parent element:

$foo = simplexml_load_string(
    '<foo><content><![CDATA[Hello, world!]]></content></foo>'
);
echo (string) $foo->content;

LIBXML_NOCDATAの方が幸運かもしれません:

$content = simplexml_load_string(
    '<content><![CDATA[Hello, world!]]></content>'
    , null
    , LIBXML_NOCDATA
);
168
Josh Davis

LIBXML_NOCDATAは、simplexml_load_file()関数のオプションの3番目のパラメーターです。これにより、すべてのCDATAデータが文字列に変換されたXMLオブジェクトが返されます。

$xml = simplexml_load_file($this->filename, 'SimpleXMLElement', LIBXML_NOCDATA);
echo "<pre>";
print_r($xml);
echo "</pre>";


SimpleXMLでCDATAを修正

42
Pradip Kharbuja

これは私のためにトリックをしました:

echo trim($entry->title);
13
breez

これは私に最適です。

$content = simplexml_load_string(
    $raw_xml
    , null
    , LIBXML_NOCDATA
);
8
vijayrana