Fed*_*nik 2 php xml simplexml xml-namespaces
我有这样的事情:
$x = simplexml_load_file('myxml.xml');
[...]
foreach($x->y->z[0]->w->k as $k){
[...]
}
Run Code Online (Sandbox Code Playgroud)
我的XML文件类似于:
<x>
<y>
<z>
<w>
<k prefix:name="value">
[...]
</k>
</w>
[...]
</z>
[...]
</y>
[...]
</x>
Run Code Online (Sandbox Code Playgroud)
现在,我想访问我的k元素的属性.在我的foreach中,我有红色,我可以使用它来访问它:
$k['prefix:name']
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我做错了什么?
我在我的k元素中添加了一个假属性并且它有效,我认为问题是我尝试访问的属性位于不同的命名空间中:
<k xsi:type="value">
[...]
</k>
Run Code Online (Sandbox Code Playgroud)
我解决了它,我在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'];
}
Run Code Online (Sandbox Code Playgroud)
该getNameSpaces(true)函数返回XML文档的名称空间,然后我选择我正在寻找的xsi那个()并访问我需要的属性,如果属性是名称空间,而不是$ k节点.我希望这可以帮助别人.