使用 XPath 将文本打印到一个元素 - PHP

Posted

技术标签:

【中文标题】使用 XPath 将文本打印到一个元素 - PHP【英文标题】:Print text up to an element with XPath - PHP 【发布时间】:2021-03-29 19:16:09 【问题描述】:

您好,我有一个元素 <td>,我只想保存/打印内容直到第二个 <br 有可能吗?

这是html

<td>
    <span class="HTML_ELM">Coniugazione di: </span>
    <span class="style11">
        <span class="HTML_ELM">moneo</span>
    </span>, monĕs, monui, monitum, monēre<br> // **STOP HERE MY FRIENDS !**
    <span class="HTML_ELM"> coniugazione: : </span>2 - transitivo - attiva<br>
    <span class="HTML_ELM">   significato: </span>ammonire, <a href="Coniugazione_latino.asp?verbo=moneo&amp;tradinv=avvertire&amp;lang=IT_">avvertire</a>,&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;<br>(eng) = <a href="Coniugazione_latino.asp?verbo=moneo&amp;tradinv=warn&amp;lang=EN_">warn</a>,&nbsp;&nbsp;&nbsp; <a href="Coniugazione_latino.asp?verbo=moneo&amp;tradinv=advise&amp;lang=EN_">advise</a>,&nbsp;&nbsp;&nbsp; <a href="Coniugazione_latino.asp?verbo=moneo&amp;tradinv=presage&amp;lang=EN_">presage</a>,&nbsp;&nbsp;&nbsp;<br><br>(esp) = <a href="Coniugazione_latino.asp?verbo=moneo&amp;tradinv=avisar&amp;lang=ES_">avisar</a>,&nbsp;&nbsp;&nbsp;&lt;<br>
 </td>

我尝试使用explode

 $query_paradigma = '//span[contains(@class, "style11")][1]/parent::td';        
 $contenuto_paradigma = $xpath->query($query_paradigma);
 $paradigma= explode("<br>",$contenuto_paradigma);
        
 print_r($paradigma[0]." <br>");
 print_r($paradigma[1]." <br>");

但我有这个错误:explode() 期望参数 2 是字符串

我希望你能帮助我,对不起我的英语

【问题讨论】:

【参考方案1】:

问题在于,当您运行query() 时,这将为您提供一组 DOM 元素,而不是内容的实际 HTML。

所以$contenuto_paradigma 将是匹配节点的列表,您只需要第一个匹配项(如果需要更多匹配项,可以遍历它们)。然后使用$dom-&gt;saveHTML() 导出此节点(&lt;td&gt; 节点)的 HTML(注意 $dom 是您的文档的名称,因此根据需要进行更改)。然后你可以从那里提取数据...

$query_paradigma = '//span[contains(@class, "style11")][1]/parent::td';
$contenuto_paradigma = $xpath->query($query_paradigma);
$tdContent = $dom->saveHTML($contenuto_paradigma[0]);

$paradigma= explode("<br>",substr($tdContent, 4)););

substr 只是从一开始就删除了&lt;td&gt; 标签)。

【讨论】:

我试过你的代码,在 $dom_td= new DOMDocument(); 之前添加(我在 $dom_td 中更改了变量 $dom 的名称)但我有错误:未捕获的 DOMException:错误的文档错误 您需要使用与创建 DOMXPath 对象相同的 DOM。

以上是关于使用 XPath 将文本打印到一个元素 - PHP的主要内容,如果未能解决你的问题,请参考以下文章

php xpath如何从父元素内的多个元素中获取值

无法在 Robot Framework 中使用 XPath 定位元素

使用 XSLT 打印元素和属性的 xpath 和值

R:将列表打印到文本文件

python 打印html源码中xpath

从 Element Selenium Python 打印文本