在CDATA XML中获取标记

时间:2014-07-17 21:05:57

标签: xml tags cdata

抱歉发送垃圾邮件。但我无法找到问题的答案。

我有一个XML,它的一个元素在CDATA中,我无法得到它。

它' S:

<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'];

拜托,我试了几个小时。如果有人可以帮助我,我很感激。

对不起我的英语。

2 个答案:

答案 0 :(得分:1)

CDATA表示&#34;字符数据&#34;。这意味着即使这里的东西看起来像标记,也可以像文字一样对待它。因此CDATA中没有标签或元素,只有人类阅读器的字符串可能类似于标签或元素。

以另一种方式来看,CDATA告诉解析器不要处理内容。

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

答案 1 :(得分:0)

由于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');
?>
相关问题