如果在PHP DOMXPath 中可以实现这一点的任何想法:我有例如3个父跨度,以及每个中的随机子节点数。首先,我收集的数据如下:
“//span[@class='parent']
”并获取第一个项目的节点值类似“Child TextChildText2Child Text 3
”。
但是我试图使用逗号分隔符来获取“Child Text,ChildText2,Child Text 3
”之类的内容。
有什么想法吗?我希望能够确定哪些孩子属于哪个孩子,同时我在父母中收集其他数据:
<span class="parent">Parent 1
<span class="child">Child Text</span>
<span class="child">ChildText2</span>
<span class="child">Child Text 3</span>
</span>
<span class="parent">Parent 2
<span class="child">Child Text4</span>
<span class="child">ChildText5</span>
</span>
<span class="parent">Parent 3
<span class="child">Child Text6</span>
<span class="child">Child Text7</span>
<span class="child">ChildText8</span>
<span class="child">Child Text 9</span>
</span>
以下PHP是我目前使用的:
$array = [];
$result = $xpath->query("//span[@class='parent']");
for ($x=0; $x<$result->length; $x++){
$array[$x]['children'] = trim($result->item($x)->nodeValue);
}
答案 0 :(得分:1)
使用xpath&gt; 2:
'string-join(//span[@class="parent"]/span, ",")'
Child Text,ChildText2,Child Text 3,Child Text4,ChildText5,Child Text6,Child Text7,ChildText8,Child Text 9
答案 1 :(得分:1)
我会直接在PHP中完成,而不是试图对xpath本身过于花哨。只需将节点值抛出一个数组,并用逗号作为分隔符implode()
。
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//span[@class="parent"]') as $parent) {
$childText = [];
foreach ($xpath->query('span[@class="child"]', $parent) as $child) {
$childText[] = trim($child->nodeValue);
}
echo implode(',', $childText), "\n";
}
Child Text,ChildText2,Child Text 3
Child Text4,ChildText5
Child Text6,Child Text7,ChildText8,Child Text 9