2010-06-19 23 views
0

用例很簡單。我想通過基本上包含HTML文檔的字符串(!)中的xpath語句來查找節點並刪除它們。如何使用xpath->查詢從包含HTML文檔的字符串中刪除找到的節點用PHP

我知道如何用PHP找到節點。它基本上是這樣的: 創建新的DOMDocument LoadHTML(或LoadXML) 創建新的DOMXpath,然後創建方法「query」或「evaluate」。完成。

但刪除是棘手的部分。人們會認爲你只需要用幾條語句刪除節點(並且在最後的parentNode-> removeChild處),然後將結果保存到帶有saveHTML的字符串中。不幸的是,這個操作幾乎每次都會在原始的HTML字符串中「轉換太多東西」。

所以我現在的問題是。如何通過xpath-> query($ query)刪除節點而不使用saveHTML或saveXML?而不用編寫我自己的解析器。

希望它已經足夠清楚:-)

感謝您看這個!

回答

0

首先,確保從底部開始刪除找到的節點。這是爲了確保您在父節點之前刪除子節點。

二,你是什麼意思「轉化爲很多東西」? PHP的DOM XML將把文檔解析爲DOM節點樹。然後你在樹上工作,當你完成時它會將DOM樹轉換回XML/HTML。你很可能會失去縮進,爭論可能會改變地方等等。重要的是文檔意味着完全相同的東西,即DOM樹的確切的XML/HTML表示。

0

Emil thanks for your quick answer

是的,你說得對。這是我如何刪除節點,它的工作原理:

使用loadHTML/loadXML將HTML STRING轉換爲DOM - >使用xpath查詢節點 - >從DOM中刪除節點(如您所述) - >將DOM轉換爲HTML STRING saveHTML/XML

工作原理 - 但問題是saveHTML後的輸出通常會顯着不同(除了已刪除的節點)。我不關心論據定位或空白。但有時網站在saveHTML之後甚至無法在瀏覽器中正確呈現。我懷疑瀏覽器處理更好的不完美的HTML代碼...

是否有另一種方式,我可以嘗試 - 除了saveHTML?

可能是不可能的(或者至少不是沒有很大的努力)?你怎麼看?

+0

請使用'添加評論'功能來回答個別答案。 SO不能像論壇一樣工作。如果您將評論作爲新答案提供,答案的作者將不會收到通知。如果你使用評論功能,他會的。 – Gordon 2010-06-19 10:32:51

相關問題