请原谅如果以下情况有点混乱,我一直在试图解决这个问题。使用PHP和xpath获取祖先节点
这是我用来为迷你CMS创建类别树的一大块XML(从大型网站导出)。一旦我得到了节点的值和名称,这是没有问题的,我还需要获取每个节点的“父”,也就是它在层次结构之上的节点之前的节点。
<productCategory>
<genericName>DigitalCinema</genericName>
<productCategories>
<productCategory>
<genericName>DCinemaProj</genericName>
<productModels>
<productModel>ProjProd-1</productModel>
<productModel>ProjProd-2</productModel>
<productModel>ProjProd-3</productModel>
<productModel>ProjProd-4</productModel>
</productModels>
</productCategory>
<productCategory>
<genericName>DCinemaLens</genericName>
</productCategory>
</productCategories>
</productCategory>
例如,对于产品分类,genericName DCinemaLens,我需要能够抓住家长为DigitalCinema,同样为个人产品型号节点,如果母公司将DCinemaProj。
我已经尝试了xpath中使用祖先,前兄弟姐妹和父母的各种不同的查询,我仍然看不到抢我需要的节点。
这是我的代码,因为它放弃了我几分钟前的尝试。
if ($xml->xpath('//productCategories')) {
foreach($xml->xpath('//genericName | //productModel') as $genericName){
echo "<p align='center'>$genericName";
$type = $genericName->getName();
echo " - (" . $type . ") ";
$derp = $xml->xpath("ancestor::productCategory[1]/genericName");
echo $derp;
echo '</p>';
}
}
我也有一些成功在阵列获取信息,但它始终只是再次返回的XML的每个值。
$key = 'genericName';
$derpgleep = $derp[$key];
echo 'Derp= ' . $derpgleep;
print_r($derp);
希望有一个非常简单的解决方案,我忽略了。我希望我已经清楚。您正在使用
好问题,+1。查看我的答案,获得一个完整,简短且简单的XPath表达式,用于选择所需的,称为“父”节点。 –