我有一個外部HTML源,我想刮,並轉換成本地XML文件或添加到MySQL數據庫。將HTML導入DOMDocument或SimpleXML時刪除內聯元素?
外部源主要是標準化和(有點)的語義,讓所有我需要做的就是使用XPATH
讓所有td
內容或全部li
內容等的問題是,偶爾這些項目使用<strong>
或<b>
或<i>
標籤來設計我需要的元素。
這在技術上是語義上的,因爲重點在於增加特定文本,開發人員可能希望使用不是瀏覽器默認值的CSS。
的問題是,我試圖抓住實際內容則認爲此內聯元素的一個孩子,讓PHP擴展像simplexml
或DOMDocument
和DOMNode
這樣對待他們。例如:
<table>
<tr><td>Thing 1</td><td>Thing 2</td></tr>
<tr><td>Thing 3</td><td>Thing 4</td></tr>
<tr><td><strong>Thing 5</strong></td><td><strong>Thing 6</strong></td></tr>
</table>
會導致:
[table] =>
[tr] =>
[td] => Thing 1
[td] => Thing 2
[tr] =>
[td] => Thing 3
[td] => Thing 4
[tr] =>
[td] =>
[strong] => Thing 5
[td] =>
[strong] => Thing 6
顯然,上面是不太什麼simplexml的回報,但上面反映的普遍問題。
所以有一種方法,使用DOMDocument已經內置的參數或使用額外的複雜XPath查詢來獲取td
元素的內容與任何孩子(如果有的話)剝奪了他們的後代狀態和所有內容視爲查詢元素的文本?
現在,唯一的解決辦法我是要麼:
一個)具有foreach
循環,檢查每一個結果,如:使用正則表達式剝去任何<strong>
標記出
$result_text = ($result -> strong) ? $result - strong : $result;
b)中在將其導入到任何預構建的類(如simplexml或DOMDocument)之前,先將HTML字符串轉換爲HTML字符串。
我不確定這是否是最好的解決方案,但我接受它並不是基於'strip_tags'建議(這很聰明),而是基於asXML()建議,而這並沒有發生給我使用之前處理移動內容到一個數組。非常好。 – Anthony 2010-01-17 08:44:56