我有一个像这样的xml文件:
<js>
<ba>
<ea>
<jd>
<option>first sko</option>
<option>second sko</option>
<option>third sko</option>
<option>fourth sko</option>
<option>fifth sko</option>
</jd>
</ea>
</ba>
</js>
我想从&#34;选项&#34;的每个值开始检索祖父母标记的标记名称(即&#34; ea&#34;);标签
所以为了从这个标签中获得两个级别,我尝试过:
$xmlItem = simplexml_load_file(thexmlfile.xml);
foreach ($xmlItem->xpath('//jd/option') as $juzg) {
$cid = $xmlItem->xpath("name(//*[*[option = '" . $juzg . "']])");
$item['cid'] = (string)$cid;
}
当我回显$ cid或$ item [&#39; cid&#39;]时,我得到的结果是&#34;数组&#34;对于每个循环。
我正在寻找代替的完整脚本:
$cid = $xmlItem->xpath("name(//*[*[option = '" . $juzg . "']])");
我将很感激有关此问题的任何指导。
答案 0 :(得分:0)
$xmlItem->xpath
会返回一个数组,所以如果你(string)$xmlItem->xpath()
,你将会得到'数组'
在你的例子中,你必须再次迭代$ cid或者只选择$ cid [0],但我不认为像这样获得父母的名字会起作用。
要么:
foreach ($xmlItem->xpath('//jd/option') as $juzg) {
$cid = $xmlItem->xpath("//*[*[option = '".$juzg."']]");
$item['cid'] = $cid[0]->getName();
}
但是,只有在xml文档中没有任何其他选项元素具有相同内容时,这才有效,因此,不要依赖于元素的内容,只需选择其父节点:
foreach ($xmlItem->xpath('//jd/option') as $juzg) {
$cid = $juzg->xpath('../..');
$item['cid'] = $cid[0]->getName();
}
在这里你甚至可以确定$cid
只有一个对象,因为你选择了一个父对象,而一个元素总是只有一个父对象。