1

基本上,我想检查链接的父级是否是<li>元素。

我正在使用 Simple DOM Parser 库。我得到这样的链接($brokenlink 是一个 URL):

$html = file_get_html($file);
$matches = $html->find("a[href=$brokenlink]");

然后我遍历 $matches

foreach ($matches as $value) {

}

我的逻辑是:

如果 $value 的父级不是 'li',请执行以下操作:

谢谢

4

3 回答 3

1

DOMXPath使用and遍历锚的 NodeList 将是微不足道的DOMDocument

// Create a new DOMDocument, load up our HTML
$doc = new DOMDocument();
$doc->loadHTML($html);

// Create a new DOMXPath object, and get our links
$xpath = new DOMXPath($doc);
$links = $xpath->query("//a[not(parent::li)][@href='$brokenURL']");

// Cycle over each anchor, check parentNode's nodeName
foreach ($links as $link) {
    echo "'{$link->nodeValue}' is not the child of a list item.";
}

演示:http ://codepad.org/UCtR49p4

于 2012-12-02T02:02:55.870 回答
0

According to the simplehtml manual, the parent of an element is available as $e->parent(). So you could do this:

$html = file_get_html($file);
$anchors = $html->find("a[href=$brokenlink]");

for ($anchors as $a) {
    if ($a->parent()->tag !== 'li') {
        // do something
    }
}
于 2012-12-02T02:09:46.967 回答
0

由于您使用的是simple_html_dom,因此您可以使用它$value->parent()来获取父节点,并tag获取标签名称:

$html = file_get_html($file);
$matches = $html->find("a[href=$brokenlink]");
foreach ($matches as $value) {
    $parent = $value->parent();
    if($parent->tag != 'li') {
        //not a child of li, do something...
    }
}

您可以通过阅读手册获得更多信息,其中包含您需要的一切。

于 2012-12-02T02:05:13.417 回答