PHP中的simplexml_load_file在解析标准XML时没问题, 但是有两点缺陷:
1. 默认会忽略CDATA的内容
2. 所有HTML标签会被忽略, 在上级节点中能看到, 但是无法通过xpath检索
第一点可以通过设置simplexml_load_file的LIBXML_NOCDATA来解决
第二点无法直接解决, 只能通过其他办法, 将HTML节点提取出后, 使用DOMDocument来抽取所要的内容.
相关代码例子如下:
$xml = simplexml_load_file("embeded_html.xml", null, LIBXML_NOCDATA);
$node = $xml->xpath("/PathToHere/ContentItem/DataContent");
$children = $node[0]->children();
$html = $children->asXML();
//print_r($html);
$dom = new DOMDocument;
$dom->loadHTML($html);
//get content
$items = $dom->getElementsByTagName('div');
foreach ($items as $item) {
if ($item->getAttribute('class') == 'content-attr') {
echo $item->nodeValue, PHP_EOL;
}
}
补充:
后来对方技术又提供了另一种解决的方案:
print_r($xml->NewsItem->NewsComponent->ContentItem->DataContent->html->body);
print_r($xml->NewsItem->NewsComponent->ContentItem->DataContent->html->body->div[1]); |
|