将(嵌套)HTML 无序列表的链接转换为 PHP 链接数组

发布于 2024-08-28 14:55:55 字数 877 浏览 5 评论 0原文

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

原始列表看起来像这样:

<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>

任何项目都可以有子项。

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

我想将其转换为仅包含链接的 PHP 数组,同时保持列表的层次结构性质。有什么想法吗?

我研究过使用 htmlsimpledom 和 phpQuery,它们都使用类似 jQuery 的语法。但是,我似乎无法正确理解语法。我可以获得所有链接,但最终失去了层次性质和顺序。

谢谢。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稀香 2024-09-04 14:55:55

按照以下方式使用 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 捕获字符串。

xpath 查询备忘单 (pdf)

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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文