在CDATA XML中获取标记



不好意思。但是我找不到我问题的答案。

我有一个XML,它的一个元素是在一个CDATA,我不能得到它。

:

<description><![CDATA[<img src='http://w3.i.uol.com.br/Wap/2010/01/19/midia-indoor-desemprego-seguro-desemprego-carteira-de-trabalho-1263914866285_142x100.jpg' align="left" />     Trabalhadores do Rio de Janeiro que buscam o seguro-desemprego têm enfrentado filas que começam na noite anterior ao dia do atendimento. Hoje (17), na agência do Poupa Tempo da Central do Brasil, no centro da capital fluminense, cerca de duzentas pessoas já aguardavam na fila às 8h, quando o atendimento começou. ]]></description>

. .正如你所看到的,标签在CDATA的内部,当我试图得到它时,它显示给我一个空白的屏幕。

我正在尝试这样做:

$xml = simplexml_load_file('http://rss.uol.com.br/feed/noticias.xml', 'SimpleXMLElement',LIBXML_NOCDATA);
echo $xml->channel->item[2]->description->img['src'];
拜托,我试了几个小时了。如果有人能帮助我,我将不胜感激。

对不起我的英语。

CDATA表示"字符数据"。它的意思是"即使这里的东西看起来像标记,也要像对待文本一样对待它"。因此,CDATA中没有标签或元素,只有对人类读者来说可能类似于标签或元素的字符串。

从另一个角度来看,CDATA告诉解析器不要处理内容。

因此,如果您确实想要处理内容,您要么必须摆脱CDATA标记,要么必须将内容放入第二阶段的解析:它第一次没有解析,因此您需要获取CDATA部分中的文本,并通过另一阶段的解析将其反馈。

由于CDATA中的内容实际上是HTML,因此您最好将其解析为HTML并以这种方式获取其内容:

<?php
    $descriptionXml = "<description><![CDATA[<img src='http://w3.i.uol.com.br/Wap/2010/01/19/midia-indoor-desemprego-seguro-desemprego-carteira-de-trabalho-1263914866285_142x100.jpg' align='left' />Trabalhadores do Rio de Janeiro que buscam o seguro-desemprego têm enfrentado filas que começam na noite anterior ao dia do atendimento. Hoje (17), na agência do Poupa Tempo da Central do Brasil, no centro da capital fluminense, cerca de duzentas pessoas já aguardavam na fila às 8h, quando o atendimento começou. ]]></description>";
    $description = simplexml_load_string($descriptionXml);
    $dom = new DOMDocument();
    $dom->loadHTML($description);
    echo $dom->getElementsByTagName('img')->item(0)->getAttribute('src');
?>

最新更新