에서 엔티티를 디코딩 나는 다음과 같은 문제가 발생 해요 :PHP, SimpleXML을은 CDATA
$xml_string1 = "<person><name><![CDATA[ Someone's Name ]]></name></person>";
$xml_string2 = "<person><name> Someone's Name </name></person>";
$person = new SimpleXMLElement($xml_string1);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string2);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string1, LIBXML_NOCDATA);
print (string) $person->name; # Someone's Name
는 PHP 문서는 NOCDATA는 "텍스트 노드로 [S] CDATA 병합"고 말한다. 나에게 이것은 CDATA가 텍스트 노드와 똑같이 취급된다는 것을 의미합니다 - 또는 3 번째 예제의 동작은 이제 2 번째 예제와 동일합니다. 그것은 아무것도하지 않고 내가 원하는 동작을 폐허로
내가 그렇지 않으면 난 그냥 CDATA 태그를 제거하는 것은 XML (은 외부 소스로부터의 공급이다)을 제어 할 수 없습니다.
이유는 위의 예는 수행하는 방식으로 작동 하는가? SimpleXML이 텍스트 노드를 처리하는 것과 같은 방법으로 CDATA 노드를 처리하도록하는 방법이 있습니까? 그 옵션을 이해하지 못하는 것 때문에 "CDATA를 텍스트 노드로 병합"하는 것은 실제로 무엇입니까? 내가 데이터를 꺼내 후
나는 현재 디코딩 합니다만, 위의 예는 여전히 나에게 이해가되지 않습니다.
이 경우 문자열로 변환 할 필요가 없습니다. (더 일반적으로 echo''기록) – hakre
@hakre하지만'print'는 다른 뭔가로 대체 디버깅하는 동안 독립에 사용 될 가능성이있다, 그래서 그것을 일관되게 문자열로 캐스팅 할 수있는 좋은 습관 말하고 싶지만 나중에 혼란을 피하십시오. – IMSoP