我需要解析以下xml文档(来自外部Web服务):
...
<dati>
<Riconoscimento>
<IdentificativoPosizione>xxxx</IdentificativoPosizione>
<OutputRestituiti>xxx</OutputRestituiti>
</Riconoscimento>
<![CDATA[text text text]]>
</dati>
...
问题是,直到有节点“Riconoscimento”simplexml解析器无法读取cdata部分,如果我删除该子节点,一切正常工作。
所以主要的问题是:它是一个有效的xml文档,如果它是有效的是有一些方法来访问CDATA部分与PHP而无需手动删除额外的孩子?
提前致谢。
答案 0 :(得分:1)
你可以这样:
$x = simplexml_load_string('<root><dati>
<Riconoscimento>
<IdentificativoPosizione>xxxx</IdentificativoPosizione>
<OutputRestituiti>xxx</OutputRestituiti>
</Riconoscimento>
<![CDATA[text text text]]>
</dati></root>', 'SimpleXMLElement', LIBXML_NOCDATA);
var_dump((string)$x->dati);
请注意LIBXML_NOCDATA
参数以将CDATA转换为文本节点。
答案 1 :(得分:1)
首先:这是一个有效的XML文档(参见here)。
定义: CDATA部分可能会发生 可能出现任何字符数据; 它们用于逃避文本块 包含哪些字符 否则被识别为标记。 CDATA部分以字符串“开头”
<![CDATA[
“并以字符串结尾”]]>
“:
在您的情况下,<data/>
- 元素是混合内容元素。
$xmlString = <<<XML
<dati>
<Riconoscimento>
<IdentificativoPosizione>xxxx</IdentificativoPosizione>
<OutputRestituiti>xxx</OutputRestituiti>
</Riconoscimento>
<![CDATA[text text text]]>
</dati>
XML;
$xml = simplexml_load_string($xmlString);
var_dump((string)$xml);
/*
* outputs:
* string(37) "
*
* text text text
* "
*/
(无需通过LIBXML_NOCDATA
)