DOMXpath - 获取元素的 href 属性和文本值

2022-08-30 19:43:25

所以我有一个这样的HTML字符串:

<td class="name">
   <a href="/blah/somename23123">Some Name</a>
</td>
<td class="name">
   <a href="/blah/somename28787">Some Name2</a>
</td>

使用XPath,我能够使用以下Xpath查询获取href属性的值:

 $domXpath = new \DOMXPath($this->domPage);
 $hrefs = $domXpath->query("//td[@class='name']/a/@href");
 foreach($hrefs as $href) {...}

获取文本值甚至更容易,如下所示:

 // Xpath auto. strips any html tags so we are 
 // left with clean text value of a element
 $domXpath = new \DOMXPath($this->domPage);
 $names = $domXpath->query("//td[@class='name']/");
 foreach($names as $name) {...}

现在我很好奇,我怎么能把这两个查询结合起来,只用一个查询来获得两个值(如果是这样的东西,甚至可能?)。


答案 1

获取

//td[@class='name']/a

,然后用 拔取文本,并使用 提取属性。nodeValuegetAttribute('href')

除此之外,您还可以将 Xpath 查询与联合运算符结合使用,以便可以使用|

//td[@class='name']/a/@href|//td[@class='name']

也。


答案 2

要将代码减少到单个循环,请尝试:

$anchors = $domXpath->query("//td[@class='name']/a");
foreach($anchors as $a)
{ 
    print $a->nodeValue." - ".$a->getAttribute("href")."<br/>";
}

根据上述:)太慢了..


推荐