Xpath从多个复杂的标签获取文本内容

时间:2018-11-20 18:42:14

标签: php html xpath domdocument

我有这个HTML模板:

<center>
    <img src="image1">
    <br><br>
    <img src="image2">
    <br><br>
    <strong><em>TITLE1 :</em></strong> DESC1<br>
    <strong><em>TITLE2 :</em></strong> DESC2<br>
    <strong><em>TITLE3 :</em></strong> DESC3<br>
    <strong><em>TITLE4 :</em></strong> DESC4<br>
    <strong><em>TITLE5 :</em></strong> DESC5<br><br><br>
    <img src="image3">
    <br><br><br>DESC_GEN
</center>

我想使用xpath获得预期结果:

TITLE 1 = DESC 1
TITLE 2 = DESC 2
TITLE 3 = DESC 3
TITLE 4 = DESC 4
TITLE 5 = DESC 5
general = DESC_GEN

在数组中,这样我就可以在代码的其他地方使用这些值。

这是我尝试过的:

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

$elements = $xpath->query("//em");
foreach($elements as $e) {
    echo $e->nodeValue . '<br/>';
}

但不幸的是,这只会返回TITLE 1,TITLE 2,TITLE 3等。

我想获取它们各自的值(在这种情况下为DESC 1,DESC 2等...)。

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

2 个答案:

答案 0 :(得分:0)

仅供参考,您使用的HTML模板不是格式正确的xml文档。根据您的解析器,它可能会或可能不会导致问题。

获得所需内容的最简单方法可能是先获得具有标题的列表

//em/text()

然后使用获取描述列表

//em/following::text()[1]

然后使用

//center/text()[last()]

最后,只需进行一些字符串操作即可将其转换为所需的形式。


请注意,实际的xpath表达式可能会有所不同,具体取决于特定的HTML文档。但是,以上内容应适用于您提供的模板。

答案 1 :(得分:0)

步行到xpah中的父emstrong,然后选择..

text()