使用PHP从HTML CDATA中的xml文件读取数据
我正在尝试读取以下格式的数据:使用PHP从HTML CDATA中的xml文件读取数据,php,xml,Php,Xml,我正在尝试读取以下格式的数据: <?xml version="1.0" encoding="UTF-8"?> <body> <![CDATA[sample content]]><br /> <![CDATA[more content]]><br /> <![CDATA[content]]><br /></body> 我不确定如何读取内容,通常我可以看到一个数组或对象,我可以循环通过 任何
<?xml version="1.0" encoding="UTF-8"?>
<body>
<![CDATA[sample content]]><br />
<![CDATA[more content]]><br />
<![CDATA[content]]><br /></body>
我不确定如何读取内容,通常我可以看到一个数组或对象,我可以循环通过
任何建议都将不胜感激。应该将
封装在一个开始和结束标签中,只有这样才能检索数据。另外,要读取CDATA
内容,您应该使用LIBXML\u NOCDATA
参数
由于那些CDATA
没有任何适当的封装,因此您得到的是空数组
固定代码。。
问题只是简单的魔法。CDATA节是一种特殊的文本节点,它们允许在不使用编码(,“,”)的情况下用XML编写特殊字符。这有两个原因:脚本元素的向后兼容性和更好的人类可读性 它们仍然是节点,可以这样读取:
string(14) "sample content"
string(12) "more content"
string(7) "content"
有什么解决办法吗?因为我无法更改远程xml文件,只能读取它们。
SimpleXMLElement Object
(
[br] => Array
(
[0] => SimpleXMLElement Object
(
)
[1] => SimpleXMLElement Object
(
)
[2] => SimpleXMLElement Object
(
)
)
)
<?php
$content = '<?xml version="1.0" encoding="UTF-8"?>
<body>
<![CDATA[sample content]]><br />
<![CDATA[more content]]><br />
<![CDATA[content]]><br /></body>';
$content = str_replace(array('<br />','<!',']>'),array('','<br><!',']></br>'),$content);
$xml = simplexml_load_string($content, 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS);
print_r($xml);
SimpleXMLElement Object
(
[br] => Array
(
[0] => sample content
[1] => more content
[2] => content
)
)
<?php
$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<body>
<![CDATA[sample content]]><br />
<![CDATA[more content]]><br />
<![CDATA[content]]><br /></body>
XML;
$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);
// iterate all text child nodes that are not just whitespaces
foreach($xpath->evaluate('/body/text()[normalize-space(.) != ""]') as $node) {
var_dump($xpath->evaluate('string(.)', $node));
}
string(14) "sample content"
string(12) "more content"
string(7) "content"