我有一个外部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