本文介绍了将一个(嵌套)HTML无序链接列表转换为PHP数组链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个常规的,嵌套的HTML无序链接列表,我想用PHP刮掉它并将其转换为数组。



原始列表如下所示:

 < ul> ; 
< li>< a href =http://someurl.com>第一项< / a>
< ul>
< li>< a href =http://someotherurl.com/>第一项的子项< / a>< / li>
< li>< a href =http://someotherurl.com/>第一个项目的第二个子项< / a>< / li>
< / ul>
< / li>
< li>< a href =http://bogusurl.com>第二项< / a>< / li>
< li>< a href =http://bogusurl.com>第三项< / a>< / li>
< li>< a href =http://bogusurl.com>第四项< / a>< / li>
< / ul>

任何项目都可以有子项。



(实际的屏幕抓取不是问题,我可以这么做。)



我想把它变成一个只包含链接的PHP数组,同时保持列表的层次性。任何想法?



我看过使用htmlsimpledom和phpQuery,它们都使用jQuery语法。但是,我似乎无法得到正确的语法。

谢谢。

>解决方案
使用DOMDocument和SimpleXMLElement:

  $ doc = new DOMDocument() ; 
$ doc-> loadHTML($ html);
$ xmlStr = $ doc-> saveXml($ doc-> documentElement);

$ xml = new SimpleXmlElement($ xmlStr);

$ links = array();

foreach($ xml-> xpath('// a')as $ li){
$ links [] = $ li-> attributes() - > href;
}

如果将href作为SimpleXMLElement添加到$ links,请使用ob_start和ob_clean捕获字符串。



(pdf)

I have a regular, nested HTML unordered list of links, and I'd like to scrape it with PHP and convert it to an array.

The original list looks something like this:

<ul>
<li><a href="http://someurl.com">First item</a>
    <ul>
    <li><a href="http://someotherurl.com/">Child of First Item</a></li>
    <li><a href="http://someotherurl.com/">Second Child of First Item</a></li>
    </ul>
</li>
<li><a href="http://bogusurl.com">Second item</a></li>
<li><a href="http://bogusurl.com">Third item</a></li>
<li><a href="http://bogusurl.com">Fourth item</a></li>
</ul>

Any of the items can have children.

(The actual screen scraping is not a problem, I can do that.)

I'd like to turn this into a PHP array, of just the links, while keeping the hierarchical nature of the list. Any ideas?

I've looked at using htmlsimpledom and phpQuery, which both use jQuery like syntax. But, I can't seem to get the syntax right. I can get all the links, but I end up losing the hierarchical nature and order.

Thanks.

解决方案

Use DOMDocument and SimpleXMLElement along the lines of:

$doc = new DOMDocument();
$doc->loadHTML($html);
$xmlStr = $doc->saveXml($doc->documentElement);

$xml = new SimpleXmlElement($xmlStr);

$links = array();

foreach ($xml->xpath('//a') as $li) {
    $links[] = $li->attributes()->href;
}

If href is being added to $links as a SimpleXMLElement, use ob_start and ob_clean to capture the string.

Cheat sheet for xpath queries (pdf)

这篇关于将一个(嵌套)HTML无序链接列表转换为PHP数组链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 05:38