在PHP中使用命名空间访问XML节点的属性

时间:2013-06-06 14:20:02

标签: php xml simplexml xml-namespaces

我有这样的事情:

$x = simplexml_load_file('myxml.xml');

[...]

foreach($x->y->z[0]->w->k as $k){
    [...]
}

我的XML文件类似于:

<x>
  <y>
    <z>
      <w>
        <k prefix:name="value">
          [...]
        </k>
      </w>
      [...]
    </z>
    [...]
  </y>
  [...]
</x>

现在,我想访问我的k元素的属性。我有红色,我可以使用,在我的foreach中访问它:

$k['prefix:name']

但它不起作用。我做错了什么?

我在我的k元素中添加了一个假属性并且它有效,我认为问题是我试图访问的属性位于不同的命名空间中:

<k xsi:type="value">
[...]
</k>

1 个答案:

答案 0 :(得分:6)

我解决了,我在http://bytes.com/topic/php/answers/798486-simplexml-how-get-attributes-namespace-xml-vs-preg_

找到了解决方案
foreach($x->y->z[0]->w->k as $k){                 
  $namespaces = $k->getNameSpaces(true);                 
  $xsi = $k->attributes($namespaces['xsi']);

  echo $xsi['type']; 
}

getNameSpaces(true)函数返回XML文档的名称空间,然后我选择我要查找的名称(xsi)并访问我需要的属性,如果属性是名称空间,而不是$ k节点。我希望这可以帮助别人。