我有这个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/>';
}
但不幸的是,这只返回标题1、标题2、标题3等。
我想得到它们各自的值(在这种情况下,DESC 1,DESC 2等…(
我可以采取什么方法来实现这个目标?
仅供参考,您使用的HTML模板不是一个格式良好的xml文档。它可能会导致问题,也可能不会导致问题,具体取决于您的解析器。
获得想要的东西最简单的方法可能是首先使用获得标题列表
//em/text()
然后使用获取描述列表
//em/following::text()[1]
然后用进行一般描述
//center/text()[last()]
最后,只需进行一些字符串操作,就可以将其转换为所需的形式。
请注意,实际的xpath表达式可能因特定的HTML文档而异。但是,以上内容应该适用于您提供的模板。
走到父em
,即xpah中的strong
或..
,然后选择text()
$elements = $xpath->query("//em");
foreach($elements as $e) {
$desc = $xpath->query("../following-sibling::text()", $e);
echo $e->nodeValue . $desc[0]->nodeValue ."<br/>";
}