2011-04-11 170 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的,所以请记住将不区分大小写的修饰符更改为最后!