2013-10-25 89 views
-3

我有一個問題解析以下的(縮短)XML的文件:解析XML部分

<?xml version="1.0" encoding="UTF-8"?> 
<!-- DOCTYPE nitf PUBLIC "-//IPTC-NAA//DTD NITF-XML 3.0//EN" "nitf.dtd" --> 
<nitf> 
    <head> 
    <title>EU-Regierungschefs streiten über Waffen für Syrien</title> 
    </head> 
    <body> 
    <body.head> 
     <hedline> 
     <hl1>EU-Regierungschefs streiten über Waffen für Syrien</hl1> 
     </hedline> 
    </body.head> 
    <body.content> 
     <p> [...] </p> 

     <block style="EXTERNAL-LINKS"> 
     <p> 
      <a href="http://dpaq.de/CyyZL">EU und Syrien</a> 
     </p> 
     <p> 
      <a href="http://dpaq.de/WzLWU">EU und Russland</a> 
     </p> 
     </block> 
     <media media-type="image"> 
     <media-reference alternate-text="Merkel und Barroso" height="600" mime-type="image/jpeg" name="large_4_3" source="../dpa-bzv_myline-images/large/jpeg-1484DE008774AFFD-20130315-img_41077628.original.large-4-3-800-252-0-2976-2041.jpg" width="800"/> 
     <media-caption> 
      <p> [...] </p> 
     </media-caption> 
     </media> 
    </body.content> 
    <body.end/> 
    </body> 
</nitf> 

PHP的部分看起來像這樣:

if (file_exists($path)) { 
    $xml = simplexml_load_file($path); 
    var_dump($xml->body->{'body.content'}); 
} 

如預期的,XML的內容被解析正確。這是我的問題開始的地方。 <body.content>也包含HTML標籤,它也被解析,但我希望內容被視爲一個字符串,直接輸出它以顯示HTML。

什麼是解決這個問題的最好方法?

+0

*正確*的方式將包裝在CDATA標籤中的數據..但我猜你沒有訪問來源? –

+0

@MikeB正確!這些文件通過FTP推送上傳。 – desperateCoder

+0

你怎麼看待這個柺杖:用'<![CDATA ['和''替換']]>'。內容>'??會比我想象的任何東西都簡單得多 – desperateCoder

回答

1

無需修改源代碼(例如,將相關節包裝在CDATA塊中,或實體轉義它),就無法告訴XML解析器僅僅解析文檔的一部分。

但是,您可以要求SimpleXML使用其文檔->asXML() method將文檔的特定部分重新轉換爲XML,例如,

echo $xml->body->{'body.content'}->block[0]->asXML(); 

Live Demo

注意,這需要嵌入HTML是有效的XML(例如,沒有未關閉的標籤或轉義& S),否則解析器將簡單錯誤試圖對其進行處理。

我還注意到,body.content本身不包含HTML,它包含各種不同的內容,這就是爲什麼我在我的示例中進一步下降了一步。

+0

好吧,非常感謝你!我認爲要做的就是尷尬地告訴...... – desperateCoder