如果下面的内容有点混乱,请原谅,我一直在努力地解决这个问题。
这是一个XML块(从一个大型网站导出),我正在使用它来创建一个小型CMS的类别树。一旦我得到了节点的值和名称,这不是问题,我还需要获取每个节点的“父节点”,也就是在层次结构中位于其上方的节点。
<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>
例如,对于productCategory-genericName DCinemaLens,我需要将其父级作为DigitalCinema获取,对于单个的productModel节点同样如此,其中父级将是DCinemaProj。
我尝试过在xpath中使用ancestor、previous-sibling和parent等不同的查询方式,但仍然无法获得所需的节点。
这是我放弃几分钟前尝试的代码。
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);
希望我没有忽略一个非常简单的解决方案。我希望我表达清楚了。