2012-03-05 151 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();