[php] PHP : SimpleXMLElement로 <! [CDATA [를 처리하는 방법?

내가 사용하는 경우 것으로 나타났습니다 SimpleXMLElement그 CDATA 태그가 포함 된 문서에 내용이 항상 NULL. 이 문제를 어떻게 해결합니까?

또한 여기에서 XML에 대한 스팸을 보내 주셔서 죄송합니다. 나는 지금 몇 시간 동안 작동하도록 XML 기반 스크립트를 얻으려고 노력하고 있습니다 …

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

“SimpleXMLElement cdata”를 검색하면 Google에서 첫 번째 히트작을 시도했지만 작동하지 않았습니다.



답변

아마도 올바르게 액세스하고 있지 않을 것입니다. 직접 출력하거나 문자열로 캐스트 할 수 있습니다. (이 예에서는 echo가 어쨌든 자동으로 수행하므로 캐스팅이 불필요합니다.)

$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
);


답변

LIBXML_NOCDATA의 세번째 파라미터 simplexml_load_file()함수. 이것은 모든 CDATA 데이터가 문자열로 변환 된 XML 객체를 반환합니다.

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

SimpleXML에서 CDATA 수정


답변

이것은 나를 위해 트릭을했습니다.

echo trim($entry->title);


답변

이것은 나를 위해 완벽하게 작동합니다.

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


답변

언제 사용 LIBXML_NOCDATA합니까?

XML을 JSON으로 변환 할 때 문제를 추가합니다.

$xml = simplexml_load_string("<foo><content><![CDATA[Hello, world!]]></content></foo>");
echo json_encode($xml, true);
/* prints
   {
     "content": {}
   }
 */

SimpleXMLElement 개체에 액세스 할 때 CDATA를 가져옵니다.

$xml = simplexml_load_string("<foo><content><![CDATA[Hello, world!]]></content></foo>");
echo $xml->content;
/* prints
   Hello, world!
*/

문자열 캐스팅 기능을 트리거하기 위해 SimpleXMLElement에 액세스하지 않기 LIBXML_NOCDATA때문에 사용하는 것이 합리적 입니다.json_encode__toString()

$xml = simplexml_load_string("<foo><content><![CDATA[Hello, world!]]></content></foo>", null, LIBXML_NOCDATA);
echo json_encode($xml);
/*
 {
   "content": "Hello, world!"
 }
*/


답변