如何解析XML/HTML服务器的响应?

问题描述:

我第一次来。 我将这些行作为服务器的响应并将它们保存在文件中。他们看起来像XML,对吧?我的任务是读取这些td标签的内容并将它们放入其他结构化文件(Excel)中。问题是我不知道该怎么做。如何解析XML/HTML服务器的响应?

目前,我想我会去掉文件的第一行和最后一行,然后将它们解析为XML。但是你知道其他方法吗?谢谢。

<CallbackContent><![CDATA[ 
    <table cellspacing="0" border="0" cellpadding="0" width="100%"> 
     <tr class="rowcolor2"> 
      <td align="left" style="padding:5px;">22/02/2010</td>       
      <td align="right" style="padding:5px;">510,02</td> 
     </tr> 
    </table>  
]]></CallbackContent> 

顺便说一句,我使用PHP。

使用XML解析器,如SimpleXML。它将允许您安全地提取CDATA。

然后,如果HTML符合XML(换句话说,就是XHTML),则可以使用SimpleXML从中提取数据。例如:

$xml='<CallbackContent><![CDATA[ 
    <table cellspacing="0" border="0" cellpadding="0" width="100%"> 
     <tr class="rowcolor2"> 
      <td align="left" style="padding:5px;">22/02/2010</td>       
      <td align="right" style="padding:5px;">510,02</td> 
     </tr> 
    </table>  
]]></CallbackContent>'; 

$CallbackContent = simplexml_load_string($xml); 
$html = (string) $CallbackContent; 

// if XHTML 
$table = simplexml_load_string($html); 

// otherwise, use 
$dom = new DOMDocument; 
$dom->loadHTML($html); 
$table = simplexml_import_dom($dom)->body->table; 

foreach ($table->tr as $tr) 
{ 
    echo 'tr class=', $tr['class'], "\n"; 
    foreach ($tr->td as $td) 
    { 
     echo 'td align=', $td['align'], ' - value: ', (string) $td, "\n"; 
    } 
} 
+0

你已经遍历了HTML DOM。但该人需要作为excel文件。因此附加为逗号分隔值。 使用头附件配置抛出为excel。 – coder 2010-02-24 12:36:01

+0

@Josh戴维斯:它完美的作品,非常感谢,你救了我的一天。看起来我没有学习关于XML的CDATA定义。 @coder:没关系,我只是想提取​​标签的内容。 – hoangquan 2010-02-24 12:50:23

您不能使用XML解析器读取表格,因为它是作为CDATA块推出的,这等同于字符串文字。

+0

谢谢,这就是为什么我告诉我会去掉第一行和最后一行。这样做可以吗? – hoangquan 2010-02-24 11:57:57

+0

我不知道,因为我没有看到你的整个文档,也看不到它是如何使用的。您希望删除的位可能具有使用或上下文,否则我从您提供的示例之外没有意识到。 – 2010-02-24 12:03:40

+0

整个文档具有相同的结构,它可能有几百个

和​​标签。我只需要获取​​标签的内容 – hoangquan 2010-02-24 12:07:49

首先,使用XML解析器读取整个事物,以便可以取出CDATA节的内容。然后采取并通过一个HTML parser

+0

谢谢。你能告诉我如何从CDATA部分提取内容吗?它的结构很奇怪。 – hoangquan 2010-02-24 12:05:23

+0

你没有。你把它提供给HTML解析器。 – 2010-02-24 12:09:50

首先,使用XML解析器读取整个事物,以便可以取出CDATA节的内容。然后采取并通过一个HTML parser

+0

谢谢。你能告诉我如何从CDATA部分提取内容吗?它的结构很奇怪。 – hoangquan 2010-02-24 12:05:23

+0

你没有。你把它提供给HTML解析器。 – 2010-02-24 12:09:50