本文介绍了将一个(嵌套)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数组链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!