假设有这样一个HTML:<div class='test'>
<p>测试文字1</p>
<div>
<span>测试文字2</span>
</div>
测试文字3
<br />
<br />
测试文字4
</div>例如我要获取到<div class='test'>和它对应的闭合标签</div>中间的所有内容,如何做?
谢谢!!!!

解决方案 »

  1.   

    可以考虑jQuery,<script type="text/javascript">
    jQuery(function(){
    var res = $(".test").html();
    return res;
    });
    </script>
      

  2.   


    好办法啊,可惜我要的是PHP上能处理的方法。
      

  3.   

    不太明白你的意思,是不是要用PHP处理获取的结果?
    如果这样的话,可以使用定界符
      

  4.   

    $html = <<<EOT
    <div class='test'>
    <p>测试文字1</p>
    <div>
    <span>测试文字2</span>
    </div>
    测试文字3
    <br />
    <br />
    测试文字4
    </div>
    EOT;
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $tags = $xpath->query('//div[@class="test"]');
    foreach($tags as $tag)
    echo $tag->nodeValue;你的HTML不完整,<div 只有一个 </div>有3个,不符合w3c标准。
      

  5.   

    本帖最后由 xuzuning 于 2013-05-12 19:28:27 编辑
      

  6.   

    phpQuery 可以在网上下载
    phpQuery 遵循 jquery 语法,除了 js 的事件处理外,就是一个 php 版的 jquery
    会用jquery 就会用 phpQuery
    唯一的缺点就是体积稍稍大了点
      

  7.   


    哈哈,那个回答是 littlebo01 回复的,我是提问者!!
    原来PHP也可以使用JQ,长见识了!!方法真好!!我等下试试
    在网上找到一种 方法是用正则的,类似这个
    <(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>["']?)footer(?(Quote)\k<Quote>)[^>]*?(/>|>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>)
    但真心看不懂呀!!
    思想就是先匹配最前面的起始标签,假设是div吧(<div),接着一旦遇到嵌套div,就“压入堆栈”,后面如果遇到div闭合标签了,就“弹出堆栈”。如果遇到闭合标签的时候,堆栈里面已经没有东西了,那么匹配结束,此结束标签为正确的闭合标签不用正则,要是也能按这种思维写出来效果就好了。
      

  8.   


    就是使用PHP来获取这段数据,上面有人介绍了PHP的JQ,呵呵。。
    不过希望有其它方法