使用php domxpath抓取标记样式

使用php domxpath抓取标记样式,php,dom,domxpath,Php,Dom,Domxpath,我有以下html <ul class="L1_1"> <li><div style="font-size:10pt;font-family:'Arial';">A, B, C</div></li></ul> A、 B,C 我正试图抓住带有所有样式和标签的。 这里是我到目前为止对domxpath的了解 $garb1=$xpath->query('//ul/li') 关于代码将抓取并显示“A、B、C”, 我想像这样抓住整个

我有以下html

<ul class="L1_1">
<li><div style="font-size:10pt;font-family:'Arial';">A, B, C</div></li></ul>
  • A、 B,C
我正试图抓住带有所有样式和标签的
  • 。 这里是我到目前为止对domxpath的了解

    $garb1=$xpath->query('//ul/li')

    关于代码将抓取并显示“A、B、C”, 我想像这样抓住整个
  • 风格

    <li><div style="font-size:10pt;font-family:'Arial';">A, B, C</div></li> 
    
  • A、B、C
  • 可能吗


    谢谢

    根据评论,您必须使用以下语法来显示HTML节点:

    echo $domobject->saveHTML( $node );
    
    您可以使用此功能:

    function returnXPathObject( $item ) 
    {
        $xmlPageDom = new DomDocument(); 
        @$xmlPageDom->loadHTML( $item );    
        $xmlPageXPath = new DOMXPath( $xmlPageDom ); 
        return $xmlPageXPath;
    }
    
    $clget = curlGet( 'localhost/webscrape/master-tung-doc-test.html' ); 
    $xpath = returnXPathObject( $clget );
    
    DOMDocument
    对象名是
    $xmlPageDom
    ,但问题是您无法访问它,因为它位于函数内部

    要访问它,您可以通过以下方式修改您的函数:

    function returnDomObject( $html ) 
    {
        $dom = new DomDocument(); 
        @$dom->loadHTML( $html );   
        $xpath = new DOMXPath( $dom ); 
        return (object) array( 'dom' => $dom, 'xpath' => $xpath );
    }
    
    $clget = curlGet( 'localhost/webscrape/master-tung-doc-test.html' ); 
    $dom = returnDomObject( $clget );
    
    $garb1 = $dom->xpath->query( '//ul/li' );
    
    echo $garb1->dom->saveHTML( $garb1->item(0) );
    
    通过这种方式,您的函数返回一个同时包含DOM对象和XPath对象的对象:您只需修改调用它的语法,使用
    $DOM->XPath->
    而不是
    $XPath->
    $DOM->DOM->
    来访问DOM对象


    实际上,IMHO,最好的方法可能是构造一个扩展的DOMDocument类。如果您感兴趣,我可以给您展示一个示例。

    根据注释,您必须使用以下语法来显示HTML节点:

    echo $domobject->saveHTML( $node );
    
    您可以使用此功能:

    function returnXPathObject( $item ) 
    {
        $xmlPageDom = new DomDocument(); 
        @$xmlPageDom->loadHTML( $item );    
        $xmlPageXPath = new DOMXPath( $xmlPageDom ); 
        return $xmlPageXPath;
    }
    
    $clget = curlGet( 'localhost/webscrape/master-tung-doc-test.html' ); 
    $xpath = returnXPathObject( $clget );
    
    DOMDocument
    对象名是
    $xmlPageDom
    ,但问题是您无法访问它,因为它位于函数内部

    要访问它,您可以通过以下方式修改您的函数:

    function returnDomObject( $html ) 
    {
        $dom = new DomDocument(); 
        @$dom->loadHTML( $html );   
        $xpath = new DOMXPath( $dom ); 
        return (object) array( 'dom' => $dom, 'xpath' => $xpath );
    }
    
    $clget = curlGet( 'localhost/webscrape/master-tung-doc-test.html' ); 
    $dom = returnDomObject( $clget );
    
    $garb1 = $dom->xpath->query( '//ul/li' );
    
    echo $garb1->dom->saveHTML( $garb1->item(0) );
    
    通过这种方式,您的函数返回一个同时包含DOM对象和XPath对象的对象:您只需修改调用它的语法,使用
    $DOM->XPath->
    而不是
    $XPath->
    $DOM->DOM->
    来访问DOM对象


    实际上,IMHO,最好的方法可能是构造一个扩展的DOMDocument类。如果你感兴趣,我可以给你举个例子。

    使用
    echo$dom->saveHTML($garb1->item(0))
    (用您的dom对象名替换
    $dom
    $objectname=new DOMDocument()
    =>
    $objectname
    是您的对象名。这是我的。函数returnXPathObject($item){$xmlPageDom=new DomDocument();@$xmlPageDom->loadHTML($item);$xmlPageXPath=new DOMXPath($xmlPageDom);return$xmlPageXPath;}$clget=curlGet(')$xpath=returnXPathObject($clget)$clget=curlGet(')$xpath=returnXPathObject($clget)$garb1=$xpath->query('//ul/li');使用
    echo$dom->saveHTML($garb1->item(0))
    (用您的dom对象名替换
    $dom
    $objectname=new DOMDocument()
    =>
    $objectname
    是您的对象名。这是我的。函数returnXPathObject($item){$xmlPageDom=new DomDocument();@$xmlPageDom->loadHTML($item);$xmlPageXPath=new DOMXPath($xmlPageDom);return$xmlPageXPath;}$clget=curlGet(')$xpath=returnXPathObject($clget)$clget=curlGet(')$xpath=returnXPathObject($clget)$garb1=$xpath->query('//ul/li');谢谢fusion3k,让我试一试。谢谢fusion3k,让我试一试。