2012-03-05 124 views
0

我有一个包含HTML结构的字符串:一个String挑战

<p> ... </p> 
<p> .... <a> .... </a></p> 
<div id="quick_preview"> 
<p> .... </p> 
</div> 
<p> ... </p> 

,我想以后做p标签只是注入<description>标签在divquick_preview类的东西。这样的事情:

<p> ... </p> 
<p> .... <a> .... </a></p> 
<div id="quick_preview"> 
    <description> 
    <p> .... </p> 
    </description> 
</div> 
<p> ... </p> 

我使用大量的技术,如domdocument或字符串处理,但无法找到正确的解决方案。

+2

'DOMDocument'沿'DOMXPath'将在瞬间做到这一点。你试过了吗? – Jon 2012-03-05 13:44:43

+0

Humm,nope! domxpath是否可以加载html流?我只是尝试domdocument – bizzr3 2012-03-05 13:46:13

+0

如果您有权访问字符串组装的功能,我会在那里做出改变 – cypherabe 2012-03-05 13:47:06

回答

1

下面是一个粗略的例子,应该帮助您开始使用PHP's DOM functions。该示例需要扩展以检查错误等,但它确实有效。

$ php test.php 
<?xml version="1.0"?> 
<root><p>First p</p><p>Another p<a>a link</a></p><div id="quick_preview"><description><p>Third p </p></description></div><p>Last p</p></root> 

下面的代码:

<?php 

$xml = "<root><p>First p</p><p>Another p<a>a link</a></p><div id='quick_preview'><p>Third p </p></div><p>Last p</p></root>"; 

$doc = DOMDocument::loadXML($xml); 

$xpath = new DOMXPath($doc); 

$query = '//div'; 
$entries = $xpath->query($query); 

$entry = $entries->item(0); 

$new = $doc->createElement("description"); 
$new->appendChild($entry->firstChild); 
$entry->appendChild($new); 
echo $doc->saveXML();