使用php domxpath抓取标记样式
我有以下html使用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”, 我想像这样抓住整个
<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,让我试一试。