gpt4 book ai didi

php - 在递归函数中获取 xml 节点的 xpath

转载 作者:可可西里 更新时间:2023-10-31 23:59:43 25 4
gpt4 key购买 nike

假设我有一些代码可以像这样递归地遍历 XML 文件:

$xmlfile = new SimpleXMLElement('http://www.domain.com/file.xml',null,true);
xmlRecurse($xmlfile,0);
function xmlRecurse($xmlObj,$depth) {
foreach($xmlObj->children() as $child) {
echo str_repeat('-',$depth).">".$child->getName().": ".$subchild."\n";
foreach($child->attributes() as $k=>$v){
echo "Attrib".str_repeat('-',$depth).">".$k." = ".$v."\n";
}
xmlRecurse($child,$depth+1);
}
}

我如何计算每个节点的 xpath,以便我可以存储它以映射到其他代码?

最佳答案

最明显的方法是将 XPath 作为第三个参数传递,并在深入挖掘时构建它。您必须考虑同名的 sibling ,因此在迭代时必须跟踪与当前 child 同名的先例 sibling 的数量。

工作示例:

function xmlRecurse($xmlObj,$depth=0,$xpath=null) {
if (!isset($xpath)) {
$xpath='/'.$xmlObj->getName().'/';
}
$position = array();

foreach($xmlObj->children() as $child) {

$name = $child->getName();
if(isset($position[$name])) {
++$position[$name];
}
else {
$position[$name]=1;
}
$path=$xpath.$name.'['.$position[$name].']';

echo str_repeat('-',$depth).">".$name.": $path\n";
foreach($child->attributes() as $k=>$v){
echo "Attrib".str_repeat('-',$depth).">".$k." = ".$v."\n";
}

xmlRecurse($child,$depth+1,$path.'/');
}
}

不过请注意,映射整个文档并沿途存储 XPath 的整个想法似乎很奇怪。您实际上可能正在为一个完全不同的问题寻找错误的解决方案。

关于php - 在递归函数中获取 xml 节点的 xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2312075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com