【问题标题】:How to Retrieve HTML block from within XML document w/ PHP如何使用 PHP 从 XML 文档中检索 HTML 块
【发布时间】:2011-12-22 19:11:15
【问题描述】:

我有一个没有 CDATA 标记和嵌入 HTML 的 XML 文档。如何提取此 HTML 以在 PHP 中对其进行操作以进行显示?

例子:

<?xml ...>
<main>
 <book>
  <title>Title of Book</title>
  <description>
   <p>Paragraph 1 describing book.<br />blah blah</p><p>2nd Paragraph</p>
  </description>
 </book>
</main>

我想将&lt;p&gt;Paragraph 1 describing book.&lt;br /&gt;blah blah&lt;/p&gt;&lt;p&gt;2nd Paragraph&lt;/p&gt; 提取到一个变量中。或者 echo 使用 simpleXML 在 php 中显示。

我试过了:

$test = new SimpleXMLElement($xmlfile);
echo $test->{'main'}->{'book'}->{'description'};

我只得到一个空行。

【问题讨论】:

    标签: php html xml


    【解决方案1】:

    你应该先将special symbols转入xml

    参考:http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

    这可以工作。

    $xml=<<<MMT
    <main>
     <book>
      <title>Title of Book</title>
      <description>
       <p>Paragraph 1 describing book.<br />blah blah</p><p>2nd Paragraph</p>
      </description>
     </book>
    </main>
    MMT;
    $xml = preg_replace('@<p>(.*?)</p>@','&lt;p&gt;$1&lt;/p&gt;',$xml);
    $xml = str_replace('<br />','&lt;br /&gt;',$xml);
    $data = simplexml_load_string($xml);
    $str = $data->book->description;
    $str = preg_replace('@&lt;p&gt;$1&lt;/p&gt;@','<p>(.*?)</p>',$str);
    $str = str_replace('&lt;br /&gt;','<br />',$str);
    echo $str;
    

    或者更好的方法,如果你只有一个循环,你可以插入 &lt;![CDATA[ ]]&gt; 用于标准 xml 数据格式:

    $xml=<<<MMT
    <main>
     <book>
      <title>Title of Book</title>
      <description>
       <p>Paragraph 1 describing book.<br />blah blah</p><p>2nd Paragraph</p>
      </description>
     </book>
    </main>
    MMT;
    $xml = preg_replace('@<description>(.*?)</description>@is','<description><![CDATA[\\1]]></description>',$xml);
    $data = simplexml_load_string($xml);
    $str = $data->book->description;
    echo $str;
    

    【讨论】:

    • 此 XML 来自第 3 方,他们无法添加 CDATA,但现在添加您的方式似乎很明显,我刚刚修改为接受 标记正则表达式中的属性。
    【解决方案2】:

    试试:

    $test = new SimpleXMLElement($xmlfile);
    echo $test->{'main'}->{'book'}->{'description'}->asXML();
    

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 2020-02-04
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      相关资源
      最近更新 更多