我遇到以下情况。我正在尝试将凌乱的HTML代码转换为漂亮而整洁的xml结构。
已删除网站的部分HTML代码:
<p><span class='one'>week number</span></p>
<p><span class='two'>day of the week</span></p>
<table class='spreadsheet'>
table data
</table>
<p><span class='two'>another day of the week</span></p>
<table class='spreadsheet'>
table data
</table>
<p><span class='one'>another week number</span></p>
ETC
现在我想用php创建以下xml结构:
<week number='week number'>
<day name='day of the week'>
<data id='table data'>table data</data>
</day>
<day name='another day of the week'>
<data id='table data'>table data</data>
</day>
</week>
<week number='another week number'>
ETC
</week>
一直在尝试简单的html dom方法,但不知道如何获得下一个兄弟,并检查它是一周中的新的一天,新的表格数据还是新的一周等等。
我当然也对其他解决方案持开放态度。
感谢。
干杯, Dandoen
答案 0 :(得分:1)
没有银弹。处理此问题的一种典型方法是首先通过htmltidy过滤html,以获得有点可预测的标记汤,然后将其提供给解析器(例如DomDocument
)。然后使用DomXPath
选择所需的节点并组装关联数组的中间结构,最后将其转换为输出xml文档。
提示:使用firebug的“复制XPath”功能来获取节点的xpath表达式。
答案 1 :(得分:1)
一个很好的选择是Tidy(又名HTML Tidy)PHP扩展。
但是,如果您使用的是网络托管服务,则可能未启用它,或者您可能需要明确要求它。
编辑:
关于php模块不应该有任何更多依赖关系的另一个选项可能类似于这个项目:
http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/index.php
答案 2 :(得分:0)
您需要转换服务xsl和xslt。
答案 3 :(得分:0)
最容易出错的“错误”方法是使用真正的浏览器进行刮擦,如果使用Selenium RC进行远程浏览器控制,这非常容易。请参阅我的示例代码,使用jQuery抓取Google:http://github.com/tszming/Selenium-Google-Scrapper。
大多数内容只需几行代码即可提取。