2011-09-23 54 views
3

你好,好日子我試圖抓取給我們的xml feed,我使用簡單的htmldom來刮掉它,但有些內容有cdata,我該如何刪除它?在simplehtmldom中刪除cdata

<date> 
<weekday> 
<![CDATA[ Friday 
]]> 
</weekday> 
</date> 

PHP

<?php  
<?php 
include('simple_html_dom.php'); 
include ('phpQuery.php'); 
if (ini_get('allow_url_fopen')) 
$xml = file_get_html('http://www.link.com/url.xml'); } 
else{  $ch = curl_init('http://www.link.com/url.xml'); 
curl_setopt ($ch, CURLOPT_HEADER, false);   
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
$src = curl_exec($ch);   
$xml = str_get_html($src, false); } 
?> 
<?php 
foreach($xml->find('weekday') as $e) 
echo $e->innertext . '<br>'; 
?> 

我相信默認simplehtmldom刪除CDATA,但由於某種原因,這是行不通的。

請告訴我,如果你需要,將有助於解決這一問題

非常感謝你的幫助

回答

3

您可以使用另一個XML分析器,它能夠CDATA轉換成的任何信息一個字符串(Demo):

$innerText = '<![CDATA[ Friday 
]]>'; 

$innerText = (string) simplexml_load_string("<x>$innerText</x>")); 

擴展代碼例如基於OP代碼

# [...] 
<?php 
foreach($xml->find('weekday') as $e) 
{ 
    $innerText = $e->innertext; 
    $innerText = (string) simplexml_load_string("<x>$innerText</x>"); 
    echo $innerText . '<br>'; 
} 
?> 

使用說明:找到包含foreach的行,然後將原始代碼與新代碼進行比較(只更換了有問題的foreach)。

+0

它似乎沒有工作,星期五的一天是動態的xml是一個天氣xml飼料,我能夠使用simplehtmldom除了與cdata的一切刮盡所有。謝謝你提供的信息,我會和其他xml解析器一起玩,就像你說的那樣=) – cooldude

+1

只需在你的變量上使用一行代碼:'$ e-> innertext'。如果您需要快速修復,無需更改完整的庫。不要忘記向圖書館作者報告你的問題。 – hakre

+0

什麼意思是用$ innerText ='<![CDATA [Friday]]>'替換$ e-> innertextxt; – cooldude

2

我同意其他答案 - 只允許顯示CDATA。我建議simpleXML

$xml = simplexml_load_file('test.xml', 'SimpleXMLElement', LIBXML_NOCDATA); 
echo '<pre>', print_r($xml), '</pre>'; 

LIBXML_NOCDATA是重要的 - 保持在那裏。

+0

我可以沿着simplehtmldom使用它,還是應該使用simplexml? – cooldude