Пожалуйста, прости, если следующее немного запутано, я убивал себя, пытаясь решить это.
Это кусок 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);
Надеюсь, есть действительно простое решение, которое я пропускаю. Я надеюсь, что я был ясен.