PHP DOM解析以获取特定div id内的元素

PHP DOM解析以获取特定div id内的元素,php,parsing,dom,Php,Parsing,Dom,我有一些html,如下所示: <div id="tvcap"> <div class="c" id="tads"> <ol> <li> <div class="vsc vsta"> <h3> <a id="pa1" href="">

我有一些html,如下所示:

<div id="tvcap">
    <div class="c" id="tads">
        <ol>
            <li>
                <div class="vsc vsta">
                    <h3>
                        <a id="pa1" href="">
                        </a>
                        <a id="vpa1" href="http://www.link1.com">
                        Link 1 Text 1</a>
                    </h3>

                    <div>
                        <div class="kv kva">
                            <cite>
                            www.link1.com</cite>
                        </div>
                    </div>

                    <span class="ac">Link 1 Text2</span>
                </div>
            </li>

            <li>
                <div class="vsc vsta">
                <h3>
                <a id="pa2" href="">
                </a>
                <a id="vpa2" href="http://www.link2.com">Link 2 Text 1</a>
                </h3>

                <div>
                    <div class="kv kva">
                    <cite>www.link2.com</cite>
                    </div>
                </div>

                <span class="ac">Link 2 Text 3</span>
                <div>
                <div class="oslk">
                </div>
                </div>
                </div>
            </li>
        </ol>
    </div>
</div>

  • www.link1.com 链接1文本2
  • www.link2.com 链接2文本3
  • 可能会有一个未知数量的链接和文本,我希望迭代,并能够得到每个链接和文本

    我在用电脑

    我找不到获取div id“vpa1”的命令

    我尝试了这个,但它没有返回任何结果:

    foreach($html->find('a') as $element) 
     if ($element->id == "vpa1") echo $element->href . '<br>';
    
    foreach($html->find('a')as$element)
    如果($element->id==“vpa1”)回显$element->href
    ';

    如何根据id为vpa[$I](vpa1、vpa2等)访问每个链接和文本。

    正如@Wrikken所说,Xpath不会很快,而是简单的解决方案

    以下代码可作为起点:

    $some_html=file_get_contents('some_html.html');//我把你的html放进了一些html.html文件
    $doc=新的DOMDocument();
    $doc->loadHtml($some_html);//$一些html应该包含您的html字符串
    $xpath=新的DOMXPath($doc);
    //没有bug的进程
    $result=$xpath->query('/*[@id=“vpa1”]');
    var_dump($结果);
    如果(!empty($result)){
    foreach($result as$link){
    变量转储($link->nodeValue);
    }    
    } 
    //输出
    //object(DOMNodeList)#4(1){[“length”]=>int(1)}字符串(38)“Link 1 Text 1”
    $result=$xpath->query('//a');
    var_dump($结果);
    如果(!empty($result)){
    foreach($result as$link){
    变量转储($link->nodeValue);
    }    
    }    
    //输出
    //object(DOMNodeList)#8(1){[“length”]=>int(4)}string(25)”“string(38)”Link 1 Text 1“string(17)”“string(13)”Link 2 Text 1
    
    正如@Wrikken所说,Xpath不会很快,而是简单的解决方案

    以下代码可作为起点:

    $some_html=file_get_contents('some_html.html');//我把你的html放进了一些html.html文件
    $doc=新的DOMDocument();
    $doc->loadHtml($some_html);//$一些html应该包含您的html字符串
    $xpath=新的DOMXPath($doc);
    //没有bug的进程
    $result=$xpath->query('/*[@id=“vpa1”]');
    var_dump($结果);
    如果(!empty($result)){
    foreach($result as$link){
    变量转储($link->nodeValue);
    }    
    } 
    //输出
    //object(DOMNodeList)#4(1){[“length”]=>int(1)}字符串(38)“Link 1 Text 1”
    $result=$xpath->query('//a');
    var_dump($结果);
    如果(!empty($result)){
    foreach($result as$link){
    变量转储($link->nodeValue);
    }    
    }    
    //输出
    //object(DOMNodeList)#8(1){[“length”]=>int(4)}string(25)”“string(38)”Link 1 Text 1“string(17)”“string(13)”Link 2 Text 1
    
    对我有效的方法是首先使用以下命令(使用以下命令)找到具有指定id字符串的div:


    然后使用div变量访问内部的更多内容。

    对我有效的方法是首先使用以下命令(使用以下命令)找到具有指定id字符串的div:


    然后使用div变量访问更多内容。

    函数从任何网页的特定div id提取内容

    下面的函数从指定的div中提取内容并返回它。如果找不到ID为的div,则返回false

    function getHTMLByID($id, $html) {
        $dom = new DOMDocument;
        libxml_use_internal_errors(true);
        $dom->loadHTML($html);
        $node = $dom->getElementById($id);
        if ($node) {
            return $dom->saveXML($node);
        }
        return FALSE;
    }
    
    $id
    是您试图提取其内容的
    的id,
    $html
    是您的html标记

    用法示例:

    $html = file_get_contents('http://www.mysql.com/');
    echo getHTMLByID('tagline', $html);
    
    输出:

    世界上最流行的开源数据库
    
    从任何网页提取特定div id的内容的函数

    下面的函数从指定的div中提取内容并返回它。如果找不到ID为的div,则返回false

    function getHTMLByID($id, $html) {
        $dom = new DOMDocument;
        libxml_use_internal_errors(true);
        $dom->loadHTML($html);
        $node = $dom->getElementById($id);
        if ($node) {
            return $dom->saveXML($node);
        }
        return FALSE;
    }
    
    $id
    是您试图提取其内容的
    的id,
    $html
    是您的html标记

    用法示例:

    $html = file_get_contents('http://www.mysql.com/');
    echo getHTMLByID('tagline', $html);
    
    输出:

    世界上最流行的开源数据库
    
    如果您知道
    XPath
    。。。事情变得更简单了。
    DOM
    中的实际快速nuilt具有
    xpath
    功能。我现在不知道这个“简单html dom解析器”是否有…@Wrikken您如何使用XPath?(我不必使用简单的HTMLDOM解析器)
    $xpath->query(//a[以(@id,'vpa')开头])取决于html的其余部分。。。事情变得更简单了。
    DOM
    中的实际快速nuilt具有
    xpath
    功能。我现在不知道这个“简单html dom解析器”是否有…@Wrikken您如何使用XPath?(我不必使用简单的HTMLDOM解析器)
    $xpath->query(//a[以(@id,'vpa')开头])取决于html的其余部分。感谢您的帮助。由于某些原因,命令“$result=$xpath->query('/*[@id=“vpa1”]”)不起作用。T