脚本宝典收集整理的这篇文章主要介绍了使用PHP和xpath获取祖先节点,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我用来为mini-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>
例如,对于productCategory-genericName DCinemaLens,我需要能够将父级抓取为DigitalCinema,对于单个productModel节点,其中父级将是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);
ancestor::productCategory[1]/genericName
如果你能够从当前节点开始执行该表达式将会工作.从当前的Array $genericName开始,这是不可能的,因为它不包含父类,也不包含祖先.
我认为您的选择是重新遍历所有XML树.这是一个样本测试,根据您的输入样本,根据需要运行.
<?PHP $xml = simplexml_load_file("test_input1.xml"); if ($xml->xpath('//productCategories')) { foreach($xml->xpath('//genericName') as $genericName){ echo "<p align='center'>$genericName"; $type = $genericName->getName(); echo " - (" . $type . ") "; $derp = $xml->xpath("//genericName[.='" . $genericName[0] . "']/ancestor::productCategory[2]/genericName"); echo $derp[0]; echo "</p>\n"; } } ?>
这将打印出以下HTML片段:
<p align='center'>DigitalCinema - (genericName) </p> <p align='center'>DCinemaProj - (genericName) DigitalCinema</p> <p align='center'>DCinemaLens - (genericName) DigitalCinema</p>
要获得productModel的“父”,您需要一个xpath,如:
$derp = $xml->xpath("//productModel[.='" . $productModel[0] . "']/parent::productCategory[1]/genericName");
以上是脚本宝典为你收集整理的使用PHP和xpath获取祖先节点全部内容,希望文章能够帮你解决使用PHP和xpath获取祖先节点所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。