Percebi que, ao usar SimpleXMLElement
em um documento que contém essas tags CDATA, o conteúdo é sempre NULL
. Como faço para corrigir isso?
Além disso, desculpe por enviar spam sobre XML aqui. Estou tentando fazer um script baseado em XML funcionar há várias horas ...
<content><![CDATA[Hello, world!]]></content>
Tentei o primeiro hit no Google se você pesquisar "SimpleXMLElement cdata", mas não funcionou.
Respostas:
Provavelmente, você não está acessando corretamente. Você pode enviá-lo diretamente ou convertê-lo como uma string. (neste exemplo, a projeção é supérflua, já que o eco faz automaticamente de qualquer maneira)
Você pode ter mais sorte com
LIBXML_NOCDATA
:fonte
print_r
você realmente não está acessando corretamente. Escreva o código que você realmente deseja - provavelmente comecho
, ou com(string)
elenco, e você descobrirá que o conteúdo é adequado. Não use LIBXML_NOCDATA, é irrelevante.<anElement>a text node <aChildElement /> <![CDATA a cdata node]]> another text node</anElement>
. O CDATA e os nós de texto são tipos diferentes, e SimpleXML rastreia isso para que você possa recuperar o XML inserido. Quando você espreme um objeto SimpleXML em uma matriz, ele joga fora muitas informações - nós CDATA, comentários, qualquer elemento não no namespace atual (por exemplo<someNSPrefix:someElement />
), a posição do elemento filho no texto, etc.LIBXML_NOCDATA
converte nós CDATA em nós de texto, mas não corrige o resto.O
LIBXML_NOCDATA
é o terceiro parâmetro opcional desimplexml_load_file()
função. Isso retorna o objeto XML com todos os dados CDATA convertidos em strings.Corrigir CDATA em SimpleXML
fonte
Isso funcionou para mim:
fonte
Isso está funcionando perfeitamente para mim.
fonte
Quando usar
LIBXML_NOCDATA
?Acrescento o problema ao transformar XML em JSON.
Ao acessar o objeto SimpleXMLElement, obtém o CDATA:
Faz sentido usar
LIBXML_NOCDATA
porquejson_encode
não acesse o SimpleXMLElement para acionar o recurso de fundição de string, estou supondo um__toString()
equivalente.fonte