2010-02-24 69 views
0

我第一次來。 我將這些行作爲服務器的響應並將它們保存在文件中。他們看起來像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。

回答

1

使用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

0

您不能使用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

0

首先,使用XML解析器讀取整個事物,以便可以取出CDATA節的內容。然後採取並通過一個HTML parser

+0

謝謝。你能告訴我如何從CDATA部分提取內容嗎?它的結構很奇怪。 – hoangquan 2010-02-24 12:05:23

+0

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