Результатом SimpleXMLElement::xpath()
всегда является массив объектов SimpleXMLElement (или false для недопустимого выражения). Объект SimpleXMLElement представляет узлы элементов, но расширение делает некоторую магию для текстовых узлов и атрибутов.
Извлечение кода из вопроса в пример:
$xml = <<<'XML'
<Arborescence>
<Item type="Theme">
<Titre>Loisirs</Titre>
</Item>
</Arborescence>
XML;
$xml = new SimpleXMLElement($xml);
$themes = $xml->xpath("/Arborescence/Item[@type='Theme']/Titre/text()");
var_dump($themes);
Выход:
array(1) {
[0]=>
object(SimpleXMLElement)#2 (1) {
[0]=>
string(7) "Loisirs"
}
}
Результатом является массив с единственным элементом SimpleXMLElement, который содержит текст. Вы можете использовать array_map()
для приведения всех возвращаемых объектов к строкам.
$xml = new SimpleXMLElement($xml);
$themes = array_map(
function(SimpleXMLElement $element) {
return (string)$element;
},
$xml->xpath("/Arborescence/Item[@type='Theme']/Titre/text()")
);
Выход:
array(1) {
[0]=>
string(7) "Loisirs"
}