好的,我是DOM的新手,但到目前为止,我已经成功地拼凑了一个半工作的解决方案。
使用xpath我正在寻找网页中的关键元素,并循环遍历每个实例,这很好,直到我到达一个空的节点。
所以在构建我的数组时,我已经说过一个元素的20个节点但只有14个节点,因为img并不是一直存在的。
所以实际上我有一个看起来像这样的数组
Array
(
[0] => Array
(
[item] => PV10923
[img] => image1.jpg
)
[1] => Array
(
[item] => PV10924
[img] => image2.jpg
)
[2] => Array
(
[item] => PV10925
[img] => image3.jpg
)
[3] => Array
(
[item] => PV10926
[img] => image4.jpg
)
[4] => Array
(
[item] => PV10927
[img] =>
)
[5] => Array
(
[item] => PV10928
[img] =>
)
[6] => Array
(
[item] => PV10929
[img] =>
)
)
实际上它应该看起来像这样
Array
(
[0] => Array
(
[item] => PV10923
[img] => image1.jpg
)
[1] => Array
(
[item] => PV10924
[img] => image2.jpg
)
[2] => Array
(
[item] => PV10925
[img] =>
)
[3] => Array
(
[item] => PV10926
[img] =>
)
[4] => Array
(
[item] => PV10927
[img] =>
)
[5] => Array
(
[item] => PV10928
[img] => image3.jpg
)
[6] => Array
(
[item] => PV10929
[img] => Image4.jpg
)
)
现在网页源代码看起来像这样
<div id="item">
<h2>PV PV10924</h2>
<p>
<a href="http://www.example.com"><img src="image4.jpg">
</p>
</div>
<div id="item">
<h2>PV PV10925</h2>
<p>
(assign a value)
</p>
</div>
<div id="item">
<h2>PV PV10926</h2>
<p>
<a href="http://www.example.com"><img src="image5.jpg">
</p>
</div>
我一直在寻找是否有办法捕获父级然后执行if语句以查看子级是否存在然后执行xpath如果不分配节点值x
阅读诵读困难不是我的强项,但相信我,我正在努力......
任何人都可以告诉我有关实现这一目标的最佳途径/方法....
答案 0 :(得分:0)
您可以检查特定元素的后代。例如:
$sample_markup = '<div id="item"><h2>PV PV10924</h2><p><a href="http://www.example.com"><img src="image4.jpg"></a></p></div><div id="item"><h2>PV PV10925</h2><p> (assign a value)</p></div><div id="item"><h2>PV PV10926</h2><p><a href="http://www.example.com"><img src="image5.jpg"></a> </p> </div>';
// using the sample markup above
$dom = new DOMDocument();
libxml_use_internal_errors(true); // handle errors
$dom->loadHTML($sample_markup);
libxml_clear_errors();
$xpath = new DOMXpath($dom);
$data = array();
$elements = $xpath->query('//div[@id="item"]');
foreach($elements as $e) {
$item = $xpath->evaluate('string(.//h2/text())', $e);
// checking
$check = $xpath->evaluate('count(.//*[descendant::a])', $e);
if($check > 0) {
$image = $xpath->evaluate('string(.//a/img/@src)', $e);
} else {
$image = 'test.jpg';
}
$data[] = array('item' => $item, 'image' => $image);
}
echo '<pre>';
print_r($data);