【问题标题】:Parse XML partially [closed]部分解析 XML [关闭]
【发布时间】:2013-11-05 01:32:31
【问题描述】:

我在解析以下(缩短的)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 内容被正确解析。这就是我的问题开始的地方。 &lt;body.content&gt; 包含 HTML 标记,它们也被解析,但我希望将内容视为字符串,直接输出以显示 HTML。

解决此问题的最佳方法是什么?

【问题讨论】:

  • 正确的方法是将这些数据包装在 CDATA 标记中。但我猜你无权访问源代码?
  • @MikeB 正确!这些文件是通过 FTP 推送上传的。
  • 你认为这是什么拐杖:用 '' 替换 '' ]]>' ??比我想象的要简单得多

标签: php xml simplexml


【解决方案1】:

如果不修改源代码(例如,将相关部分包装在 CDATA 块中,或对其进行实体转义),您无法告诉 XML 解析器简单地不解析文档的一部分。

但是,您可以要求 SimpleXML 使用其-&gt;asXML() method 将文档的特定部分转换回 XML,例如

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

Live Demo

请注意,这要求嵌入的 HTML 是有效的 XML(例如,没有未关闭的标签或未转义的 &amp;s),否则解析器将在尝试处理它时出错。

我还注意到body.content 本身不包含 HTML,它包含各种不同的内容,这就是我在示例中更进一步的原因。

【讨论】:

  • 嗯,非常感谢!我考虑做的是尴尬的告诉...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 2018-10-20
相关资源
最近更新 更多