PHP xpath获取标记名称

时间:2014-03-25 02:51:48

标签: php xpath simplexml

我有一个像这样的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 . "']])");

我将很感激有关此问题的任何指导。

1 个答案:

答案 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只有一个对象,因为你选择了一个父对象,而一个元素总是只有一个父对象。