我試圖解析一個HTML字符串,並在任何p
標籤周圍添加一個CDATA
標籤,因此<p>something</p>
最終將會是<p><!CDATA[<p>blah</p>]]</p>
。這做什麼,我想在這方面:DOMDocument和UL tages
$html_str = '<p><strong>blah blah blah</strong></p><ul><li>blah blah blah</li><li>blah blah blah</li><li>blah blah blah</li></ul><p>blah blah blah</p>';
$domdoc = new DOMDocument();
$domdoc->loadHTML($html_str);
foreach($domdoc->getElementsByTagName("p") as $pnode) {
$cdata = $domdoc->createCDATASection('<p>'. $pnode->nodeValue .'</p>');
$pnode->replaceChild($cdata, $pnode->childNodes->item(0));
}
echo $domdoc->saveXML();
的問題是有一些ul
標籤字符串中不屬於內p
標籤,我需要做那些同樣的事情;他們需要在p
標記內被CDATA
包圍,如<p><!CDATA[<ul>blah</ul>]]</p>
。
我希望我可以去通過串第一,在任何ul
前加上一個p
標籤,然後只用上述相同的上第二遍把所有的p
標籤是一個CDATA
內時,例如:
$html_str = '<p><strong>blah blah blah</strong></p><ul><li>blah blah blah</li><li>blah blah blah</li><li>blah blah blah</li></ul><p>blah blah blah</p>';
$domdoc = new DOMDocument();
$domdoc->loadHTML($html_str);
foreach($domdoc->getElementsByTagName("ul") as $ulnode) {
$cdata = $domdoc->createElement("p",$ulnode->nodeValue);
$domdoc->replaceChild($cdata,$ulnode);
}
foreach($domdoc->getElementsByTagName("p") as $pnode) {
$cdata = $domdoc->createCDATASection('<p>'. $pnode->nodeValue .'</p>');
$pnode->replaceChild($cdata, $pnode->childNodes->item(0));
}
echo $domdoc->saveXML();
顯然,這沒有工作,我結束了與li
項目只是內容。難道我不能這樣做2次傳球嗎?還是因爲ul
是帶孩子或父母的父母?
我試圖用落得這樣的:
<p><!CDATA[<p><strong>blah blah blah</strong></p>]]></p>
<p><!CDATA[<ul><li>blah blah blah</li><li>blah blah blah</li><li>blah blah blah</li></ul>]]></p>
<p><!CDATA[<p>blah blah blah</p>]]></p>
我對CDATA標籤不太熟悉,但是在我看來,就像你對它們有一個太多的右括號(''')。 – freginold
你的意思是你可能在'p'內有'ul'標籤? – revo