繁体   English   中英

获取父a-tag php xpath的href元素

[英]Get href element of parent a-tag php xpath

我有一个页面,其中包含带有 div 的链接。 链接看起来像:

<a href="http://www.url.com">
    <span>
        <div class="linkText">Link text</div>
    </span>
</a>

我设法使用以下内容提取链接文本:

$links = $xpath->query('//div[@class="linkText"]');

foreach($links as $link) {
    $container_parent = $link->parentNode->tagName; //result: span
    $container_parent_parent = $link->parentNode->parentNode->tagName; //result: a
    $container_parent_parent_href = $link->parentNode->parentNode->href; //doesnt work
}

我如何设法从 $container_parent_parent a获取href

尝试使用属性语法,因为@href是的属性a

$links = $xpath->query('//div[@class="linkText"]');
foreach($links as $link) {
    $container_parent = $link->parentNode->tagName; //result: span
    $container_parent_parent = $link->parentNode->parentNode->tagName; //result: a
    $container_parent_parent_href = $link->parentNode->parentNode['href'];  // See how @href is referenced
}

使用 DOMDocument,你需要使用getAttribute()来访问属性...

$container_parent_parent_href = $link->parentNode->parentNode->getAttribute('href');

您正在使用 Xpath 表达式,但只有使用DOMXpath:evaluate()才能充分利用它。 它允许您使用返回标量值的表达式。 你可以用两种方式看待问题。

  1. 使用linkText类查找所有元素,然后查看a元素的祖先(不仅仅是父元素),并以字符串形式获取其src属性。
  2. 获取具有linkText类的后代a元素并获取其src属性。

例子:

$xml = <<<'XML'
<a href="http://www.url.com">
    <span>
        <div class="linkText">Link text</div>
    </span>
</a>
XML;

$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);

foreach ($xpath->evaluate('//*[@class = "linkText"]') as $node) {
    var_dump(
        $xpath->evaluate('string(ancestor::a/@href)', $node)
    );
}
foreach ($xpath->evaluate('//a[.//*[@class = "linkText"]]') as $a) {
    var_dump(
        $a->getAttribute('href')
    );
}

输出:

string(18) "http://www.url.com"
string(18) "http://www.url.com"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM