내가 사용하는 경우 것으로 나타났습니다 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>";
답변
이것은 나를 위해 트릭을했습니다.
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!"
}
*/
답변
