2013-03-27 37 views
0

我已经编写了一个php脚本,用于登录我们的学校笔记系统。但我试图解析HTML页面到XML。但我遇到了一些麻烦。首先,tabel的html代码有点乱,我不知道现在该做什么。刮掉HTML表格并在PHP中创建XML

这是CURL PHP页面:http://koetse.eu/test/curl.php。 这是答复的源代码:http://pastebin.com/RDawmsnY

我试图改变这种凌乱的HTML TABEL到一个XML文件,看着有点像:

<?xml version="1.0" ?> > 
<notes> 
    <name>Jurre (4HC)</name> 
      <class>kwt</class> 
      <class>netl</class> 
        <note>6.6</note> 
        <note>6.3</note> 
        <note>4.9</note> 
        <se>5.8</se> 
      <class>entl</class> 
        <note>7.5</note> 
        <note>7.3</note> 
        <note>7.7</note> 
        <note>10.0</note> 
        <note>6.6</note> 
        <note>9.6</note> 
        <note>6.7</note> 
        <note>6.7</note> 
        <se>8.6</se> 
      <class>lv</class> 
        <note>7.8</note> 
        <note>4.8</note> 
        <se>6.3</se> 
</notes> 

等...(我只是做了前3行为例)

抱歉使用pastebin,但我陷入了一个帖子的最大长度的战斗。

问候Jurre

+0

是否加载如果你'$ d =新的DOMDocument()在所有; $ d-> loadHtml($ garbargeHTML);'? – Kris 2013-03-27 15:14:41

+0

Nope Im出错, 警告:DOMDocument :: loadHTML()[domdocument.loadhtml]:标记wissearch:排除无效的实体,行:3 可捕获的致命错误:类DOMDocument的对象无法转换为字符串in /第33行的public_html/test/xml.php – 2013-03-27 19:04:20

+1

您的错误不是来自解析,而是来自尝试将DOMDocument视为字符串(请参见第33行)。很可能你的DOMDocument加载正常。 – 2013-03-27 21:45:43

回答

0

很惊讶,没有人提到TIDY。 http://www.w3.org/People/Raggett/tidy/。几次正式保存我的屁股。我已经成功地将您的HTML加载到DOM文档中,而不会将问题传递给它。

然而,有一个重要的mod需要在完成整理之后完成 - 学校的系统会输出一些标签,尽管它们可以在XML文档中完美工作,但它们在HTML中不起作用 - wisssearch。搜索&使用正则表达式进行替换,最后得到一个有效的DOMDocument!

事情下一步:

  • 摆脱所有这些&xAA;马克的 - 正则表达式
  • 解析的东西!

(整齐-f ERRORS.TXT -m your_file.txt)

+0

我知道它最终解析为XML使用TIDY,但是有没有办法清除此代码? http://92.108.180.252/xml.php – 2013-03-28 18:00:49

+0

从这里开始,它一路是手动的 - 找到你想要的内容,并使用DOMDocument/DOMElement导航,正则表达式或递归下降的组合提取它。没有简单的方法:-( – 2013-03-28 18:04:17

0

该HTML文件确实看起来很讨厌。我不认为你将能够用DOM解析器或任何XML解析它。

我会建议尝试正则表达式的方法。

类名称显示在一个很好的未编号列表中,因此您可以通过查找<ul></ul>标签来抓取它们,然后使用正则表达式从span标签中提取名称。

类似地,您可以找到第二个出现<table和第一个出现的</table>,然后在其中取得行和单元格,最后丢弃跨度内容并留下数字。