Php Xpath从多个标记获取文本内容

Php Xpath从多个标记获取文本内容,php,html,xpath,domdocument,Php,Html,Xpath,Domdocument,我有这个HTML模板: <ul> <li> <div> <span class="field_full"><strong>Title 1</strong></span> : <span itemprop="alternativeHeadline"> <span itemprop="alternativeHeadline"> DESC 1 </span> </span>

我有这个HTML模板:

<ul>
<li>
<div>
<span class="field_full"><strong>Title 1</strong></span> :
<span itemprop="alternativeHeadline">
<span itemprop="alternativeHeadline">
DESC 1
</span>
</span></div>
</li>
<li>
<div>
<span class="field_full"><strong>Title 2</strong></span> :
<span itemscope="" itemtype="http://schema.org/type2" itemprop="type2">
<a href="/"><span itemprop="name">DESC 2</span></a>
</span>
</div>
</li>
<li>
<div>
<span class="field_full"><strong> Title 3</strong></span>:
<span itemprop="type3" itemscope="" itemtype="http://schema.org/type3">
<a href="/"><span itemprop="name">DESC 3-1</span></a>, <a href="/"><span itemprop="name">DESC 3-2</span></a>, <a href="/"><span itemprop="name">DESC 3-3</span></a>
</span>
</div>
</li>
<li>
<span class="field_full"><strong>Title 4</strong></span>:
<span> <a href="/">DESC 4</a></span>
</li>
<li>
<span class="field_full"><strong>Title 5</strong></span>:
<span itemprop="type">
<a href="/">DESC 5-1</a>, <a href="/">DESC 5-2</a>
</span>
</li>
<li>
<span class="field_full"><strong>Title 6</strong></span>:
<span itemprop="type">
DESC 6
</span>
</li>
<li>
<span class="field_full"><strong>Title 7</strong></span>:
<span itemprop="type">
DESC 7
</span>
</li>
<li>
<span class="field_full"><strong>Title 8</strong></span>:
<span itemprop="type">
<a href="/">DESC 8</a>
</span>
</li>
</ul>
我试过什么?

$dom = new DOMDocument();
$dom->loadHTML($html_string);
$xpath = new DOMXpath($dom);

$elements = $xpath->query("//span[@class='field_full']");
foreach($elements as $e) {
    echo $e->nodeValue . '<br/>';
}
$dom=newdomdocument();
$dom->loadHTML($html\u字符串);
$xpath=newdomxpath($dom);
$elements=$xpath->query(//span[@class='field\u full']);
foreach($e){
echo$e->nodeValue.“
”; }
但不幸的是,这只返回标题1、标题2、标题3等

我想得到它们各自的值(在本例中为DESC 1、DESC 2等…)

我可以采取什么方法来实现这个目标


Thank’s

下面的表达应该可以做到这一点:

//span[@class=“field\u full”]/以下兄弟姐妹::span


演示:

要获得所需的确切结果,可以使用相对XPath查询,使用原始的
节点作为根:

$elements = $xpath->query("//span[@class='field_full']");
foreach($elements as $e) {
    echo trim($e->nodeValue) . ' = ';
    $spans = $xpath->query("following-sibling::span", $e);
    foreach ($spans as $span) echo " " . trim($span->nodeValue);
    echo "<br/>";
}
$elements=$xpath->query(//span[@class='field\u full']);
foreach($e){
回声微调($e->nodeValue)。“=”;
$spans=$xpath->query(“以下同级::span”,$e);
foreach($span作为$span)echo”“.trim($span->nodeValue);
回声“
”; }
输出:

Title 1 =  DESC 1<br/>
Title 2 =  DESC 2<br/>
Title 3 =  DESC 3-1, DESC 3-2, DESC 3-3<br/>
Title 4 =  DESC 4<br/>
Title 5 =  DESC 5-1, DESC 5-2<br/>
Title 6 =  DESC 6<br/>
Title 7 =  DESC 7<br/>
Title 8 =  DESC 8<br/>
Title 1=DESC 1
标题2=描述2
标题3=描述3-1、描述3-2、描述3-3
标题4=描述4
标题5=描述5-1,描述5-2
标题6=描述6
标题7=描述7
标题8=描述8

我将匹配每个
  • ,然后从每个
    中找到相应的数据,以使迭代更容易。
    
    Title 1 =  DESC 1<br/>
    Title 2 =  DESC 2<br/>
    Title 3 =  DESC 3-1, DESC 3-2, DESC 3-3<br/>
    Title 4 =  DESC 4<br/>
    Title 5 =  DESC 5-1, DESC 5-2<br/>
    Title 6 =  DESC 6<br/>
    Title 7 =  DESC 7<br/>
    Title 8 =  DESC 8<br/>