2011-04-11 116 views
0

我以前使用過DOM解析PHP中的網站。解析HTML元素

我知道我不應該嘗試使用正則表達式解析HTML。

但是......(我不想開始shitstorm,只是一個答案:P)

如果我想分析只是1個HTML元素,例如

<a href="http://example.com/something?id=1212132131133&filter=true" rel="blebeleble" target="_blank"> 

,並找到href屬性的內容,我可以(也可能我需要,如果我可以)使用DOM來解析這個字符串或者我需要一個完整的網頁,以便能夠使用DOM解析它?

+1

什麼是使用DOM意味着解析? – 2011-04-11 22:11:16

+0

http://php.net/manual/en/book.dom.php – PeeHaa 2011-04-11 22:17:19

回答

3

是的,你可以這樣做。

你必須:

  • 假裝<a />標籤構成整個文檔;
  • 確保您關閉標籤;
  • 確保輸入字符串是有效的XML(請注意,我已將&替換爲合適的HTML實體&amp;)。

代碼:

<?php 
$str = '<a href="http://example.com/something?id=1212132131133&amp;filter=true" rel="blebeleble" target="_blank" />'; 

$dom = new DOMDocument(); 
$dom->loadXML($str); 
var_dump($dom->childNodes->item(0)->attributes->getNamedItem('href')->value); 

// Output: string(57) "http://example.com/something?id=1212132131133&filter=true" 
?> 

PS,如果要包括鏈接文本,也沒什麼太:

$str = '<a href="http://example.com/something?id=1212132131133&amp;filter=true" rel="blebeleble" target="_blank">Click here!</a>'; 
// .. code .. // 

// Output: string(57) "http://example.com/something?id=1212132131133&filter=true" 
+0

只有正確的答案。感謝Tomalak! – PeeHaa 2011-04-11 22:29:48

+0

很好的答案,謝謝你的一堆。我沒有美麗的湯或Nokogiri問題,但我發現DomDocument很難使用。 – JAL 2011-05-21 00:00:19

0

鑑於您已經將它隔離,您可以輕鬆地修改正則表達式來解析此標記。一個例子可以是found here。這是針對java的,所以請記住將不區分大小寫的修飾符更改爲最後!