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

РНР-часть выглядит следующим образом:

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

Что вы думаете об этом как костыль: замените '' на 'by']]> '?? было бы намного проще, чем все, что я могу себе представить. – desperateCoder

ответ

1

Не изменяя источник (например, чтобы обернуть соответствующий раздел в блоке CDATA или исключить его из-за сущности), вы не можете сказать, что синтаксический анализатор XML просто не разбирает часть документа.

Однако вы можете попросить SimpleXML превратить конкретный раздел документа в XML, используя его ->asXML() method, например.

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

Live Demo

Обратите внимание, что это требует, чтобы встроенный HTML валидный XML (например, не незакрытые теги или незаменяемые & s), в противном случае синтаксический анализатор будет просто ошибка при попытке обработать его.

Я также замечаю, что body.content сам по себе не содержит HTML, он содержит различный контент, поэтому я спустился еще на один шаг в моем примере.

+0

Хорошо, большое вам спасибо! То, что я считаю, это неловко сказать ... – desperateCoder

Смежные вопросы