2010-10-06 22 views
0

我需要将网页中的所有HTML标签提取到数组中,而标签内没有数据。它看起来像...如何从网页中将所有HTML标签提取到数组中?

我使用PHP

Array 
{ 
    html => 
      Array 
      { 
       head => 
          Array 
          { 
           title, 
           meta name='description' content='bla bla' 
           meta name='keyword' content='bla bla' 
           .... 
          }, 
       body => 
          Array 
          { 
           div id='header' => 
               Array 
               { 
                div class='logo', 
                div class='nav' 
               }, 
           div id='content' => 
               Array 
               { 
                h1, 
                p class='first-para', 
                p, 
                p, 
                div id='ad' 
               }, 
           div id='footer' => 
               Array 
               { 
                ul => 
                 Array 
                 { 
                  li => 
                    Array 
                    { 
                    a href='link.htm' 
                    }, 
                  li => 
                    Array 
                    { 
                    a href='link.htm' 
                    }, 
                  li => 
                    Array 
                    { 
                    a href='link.htm' 
                    } 
                 } 
               } 
          } 

      } 
} 
+0

[解析HTML的最佳方法]的可能的重复(http://stackoverflow.com/questions/3577641/best-methods-to-parse-html) – Gordon 2010-10-06 14:47:10

回答

2

你需要的是一个HTML解析器(XML解析器可能不会做,因为HTML通常是无效的)。也许:http://simplehtmldom.sourceforge.net/

+1

建议第三方替代[SimpleHtmlDom](http:// simplehtmldom.sourceforge.net/)实际使用[DOM](http://php.net/manual/en/book.dom.php)而不是字符串分析:[phpQuery](http://code.google.com/p/phpquery /),[Zend_Dom](http://framework.zend.com/manual/en/zend.dom.html),[QueryPath](http://querypath.org/)和[FluentDom]( http://www.fluentdom.org)。 – Gordon 2010-10-06 14:46:49

+0

当你使用'loadHTML()'时,DOM可以加载真实世界的HTML。这似乎是一种常见的误解。 – Gordon 2010-10-06 15:05:00

0

我认为最简单的方法是使用XPath。

//*::name() 

应该给你所有层次上所有节点的名称。 Iam不确定不是层次结构将被平铺。

相关问题