Can't get node's text with XPATH from my XML using PHP
Hey everybody thanks for your time, I'm trying to parse a big XML file (pic bellow) and to get the text of specific nodes using XPATH expression in PHP.
Here is my php :
<?php
echo "[Generation Starts !]\n";
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if (file_exists('../source/particuliers/arborescence.xml')) {
$xml = new SimpleXMLElement(file_get_contents('../source/particuliers/arborescence.xml'));
$xml->registerXPathNamespace('dc', 'http://purl.org/dc/elements/1.1/');
$themes = $xml->xpath("/Arborescence/Item[@type='Theme']/Titre/text()");
var_dump($themes);
$JSON = json_encode($themes, JSON_UNESCAPED_UNICODE);
file_put_contents('testing.json', $JSON);
echo "[Generation Done !]\n";
} else {
echo "File wasn't found\n";
}
I won't put the whole XML file here as it is way too big but here is a pic so you see the structure
Using this XPATH expression/Arborescence/Item[@type='Theme']/Titre/text()
I expected to get text from my nodes but I only have an empty array with the right number of elements in it but all empty.
Anything I'm doing wrong ?
Answer
Solution:
The result of
SimpleXMLElement::xpath()
is always an array of SimpleXMLElement objects (or false for an invalid expression). SimpleXMLElement object represent element nodes, but the extension does some magic for text nodes and attributes.Stripping down the code from the question into an example:
Output:
The result is an array with a single SimpleXMLElement that contains the text. You can use
array_map()
to cast all returned objects to strings.Output: