2011-11-05 43 views
0

我有一个没有CDATA标签和嵌入​​式HTML的XML文档。我如何提取这个HTML来操纵它在PHP中显示?如何从XML文档中检索HTML块w/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> 

我想提取<p>Paragraph 1 describing book.<br />blah blah</p><p>2nd Paragraph</p>到变量中。或者使用simpleXML在PHP中显示回显。

我想:

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

,我只是得到了一个空白行。

回答

0

应先xml

参考转移special symbolshttp://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; 

或更好的方法,如果你只有一个回路,可以插入<![CDATA[]]>为标准的XML数据formart:

$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; 
+0

此XML来自第3第三方,他们无法添加CDATA,但现在增加你的方式似乎非常明显,我只是修改为接受标记正则表达式中的属性。 – user663581

0

尝试:

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