我有这样的东西:
$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>
最佳答案
我解决了,我在 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 节点的。我希望这可以帮助其他人。
关于php - 在 PHP 中使用命名空间访问 XML 节点的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16964535/