Cal*_*lum 6 php xpath simplexml xml-namespaces collada
可能重复:
xPath只发现*
我试图使用xml来解析.COLLADA文件.问题是,xpath()如果根标签具有xmlns属性,我似乎无法使用它来访问元素.
例如,这有效:
$string = <<<TEST
<?xml version="1.0" encoding="utf-8"?>
<COLLADA version="1.4.1">
<library_materials>
<material id="Material" name="Material">
<instance_effect url="#Material-effect"/>
</material>
<material id="Material2" name="Material">
<instance_effect url="#Material-effect2"/>
</material>
</library_materials>
</COLLADA>
TEST;
$lol = new SimpleXMLElement($string);
print_r($lol->library_materials->xpath("material[@id='Material2']"));
Run Code Online (Sandbox Code Playgroud)
但这不是:
$string = <<<TEST
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<library_materials>
<material id="Material" name="Material">
<instance_effect url="#Material-effect"/>
</material>
<material id="Material2" name="Material">
<instance_effect url="#Material-effect2"/>
</material>
</library_materials>
</COLLADA>
TEST;
$lol = new SimpleXMLElement($string);
print_r($lol->library_materials->xpath("material[@id='Material2']"));
Run Code Online (Sandbox Code Playgroud)
xmlns如何突然使xml树无法使用?我认为它只是定义了命名空间,因此您可以将其与其他命名空间中的其他相同标记区分开来.我错过了什么?
您需要注册名称空间:
$lol = new SimpleXMLElement($string);
$lol->registerXPathNamespace('cada', 'http://www.collada.org/2005/11/COLLADASchema');
print_r($lol->xpath("child::cada:library_materials//*[@id='Material2']"));
Run Code Online (Sandbox Code Playgroud)