Возможный дубликат:
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']"));
Но это не так:
$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']"));
Как xmlns внезапно делает xml-дерево непригодным для использования? Я думал, что он просто определяет пространство имен, чтобы вы могли отличить его от других идентичных тегов в других пространствах имен. Что мне не хватает?