2013-10-25 88 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