trevor1940
asked on
PHP: Parsing XML file
Hi
I'm attempting to pass an XML file
Produces
Before some one asks I cannot upload the xml file but it looks like this (There might be errors due to fat fingers)
Could someone suggest how to get the value of title and how to loop through the "Properties Array" accessing the elements of object(SimpleXMLElement)[2 ] (In the XML these are Name Value pears that don't show up in the var_dump also the parts of filmData?
I'm attempting to pass an XML file
$xml = simplexml_load_file('test.xml');
var_dump($xml);
Produces
\\Path\To\test.php
object(SimpleXMLElement)[1]
public 'title' => string "My Title" (length=8)
........
public 'properties ' =>
array (size=1234)
0=>
object(SimpleXMLElement)[2]
2=>
object(SimpleXMLElement)[2]
3=>
object(SimpleXMLElement)[4]
Before some one asks I cannot upload the xml file but it looks like this (There might be errors due to fat fingers)
<?xml version="1.0" encoding="UTF-8" ?>
<resultset xmlns="http://example.com/" xmlns:ns2="http://example.com/path/to/file" xmlns:ns2="http://example.com/path/to/other/file">
<title>The Searchers</title>
<date>1956</date>
<properties >
<ns2:name>overview</ns2:name>
<ns2:value xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">As a Civil War veteran spends years searching for a young niece captured by Indians, his motivation becomes increasingly questionable.</ns2:value>
</properties >
<properties >
<ns2:name>Director</ns2:name>
<ns2:value xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">John Ford</ns2:value>
</properties >
<properties >
<ns2:name>actors</ns2:name>
<ns2:value xmlns:xsi="http://example.com/XMLSchema" xsi:type="ns2:list">
<ns2:entries xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">John Wayne</ns2:entries>
<ns2:entries xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Jeffrey Hunter</ns2:entries>
<ns2:entries xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Vera Miles</ns2:entries>
<ns2:entries xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Natalie Wood</ns2:entries>
</ns2:value>
</properties >
<filmData>
<location>Monument Valley</location>
<imdb>https://www.imdb.com/title/tt0049730/</imdb>
<filmData>
</resultset>';
Could someone suggest how to get the value of title and how to loop through the "Properties Array" accessing the elements of object(SimpleXMLElement)[2
ASKER
The title works but
Gives
I'm assuming I can get above to work I'll need do something like
foreach($xml->properties as $r) {
echo "Name: " . $r->name . "<br>";
echo "Value:" . $r->value . "<br>";
}
Gives
Name:
Value:
Name:
Value:
I'm assuming I can get above to work I'll need do something like
foreach($xml->properties as $r) {
$name = $r->name;
if($name == "actors"){
// process as array??
}
else{
echo "Name: " . $name . "<br>";
echo "Value:" . $r->value . "<br>";
}
}
It would depend on your data - I had to work on a modified version of the xml you posted as it did not work as presented.
You can also try casting your values to strings (string)$r->name.
As for accessing the entries - you can just check if it exists and then do
You can also try casting your values to strings (string)$r->name.
As for accessing the entries - you can just check if it exists and then do
$xml = simplexml_load_file('t3400.xml');
$title = $xml->title;
echo $title;
echo "<pre>";
foreach($xml->properties as $r) {
echo "Name: " . $r->name . "\n";
if (isset($r->value->entries)) {
foreach($r->value->entries as $p) {
echo "A: {$p}\n";
}
}
else {
echo "Value:" . $r->value . "\n";
}
}
echo "</pre>";
Using XML<?xml version="1.0" encoding="UTF-8" ?>
<resultset xmlns:xs="http://example.com/" xmlns:ns2="http://example.com/path/to/other/file">
<title>The Searchers</title>
<date>1956</date>
<properties>
<name>overview</name>
<value>As a Civil War veteran spends years searching for a young niece captured by Indians, his motivation becomes increasingly questionable.</value>
</properties>
<properties >
<name>Director</name>
<value>John Ford</value>
</properties >
<properties>
<name>actors</name>
<value>
<entries xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">John Wayne</entries>
<entries xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Jeffrey Hunter</entries>
<entries xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Vera Miles</entries>
<entries xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">Natalie Wood</entries>
</value>
</properties >
<filmData>
<location>Monument Valley</location>
<imdb>https://www.imdb.com/title/tt0049730/</imdb>
</filmData>
</resultset>
ProducesThe Searchers
Name: overview
Value:As a Civil War veteran spends years searching for a young niece captured by Indians, his motivation becomes increasingly questionable.
Name: Director
Value:John Ford
Name: actors
A: John Wayne
A: Jeffrey Hunter
A: Vera Miles
A: Natalie Wood
ASKER
I wish I was able to show you a real example but It's just not possible
Still doesn't reveal anything
Doing something like A perl script i've written in the past just errors
This isn't the way to do it I'm sure but by reading the XML in using file_get_contents
Then use str_replace to remove "ns2:"
Then process the string with $xml = simplexml_load_string($xml );
I can then access the name value pares as shown
$name = (string)$r->name;
Still doesn't reveal anything
Doing something like A perl script i've written in the past just errors
$name = (string)$r->ns2:name;
This isn't the way to do it I'm sure but by reading the XML in using file_get_contents
Then use str_replace to remove "ns2:"
Then process the string with $xml = simplexml_load_string($xml
I can then access the name value pares as shown
What does this produce
Can we at least see what the dump looks like to see how data is stored internally.
echo "<pre>" . print_r($xml, true) . "</pre>";
Can we at least see what the dump looks like to see how data is stored internally.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
What Julian said.
And here is an article on the subject
https://www.experts-exchange.com/articles/11342/Reading-XML-Namespaces-using-PHP-Without-regex.html
And here is an article on the subject
https://www.experts-exchange.com/articles/11342/Reading-XML-Namespaces-using-PHP-Without-regex.html
ASKER
Hi
Not sure about last comment
Will try when I'm back in the office
Not sure about last comment
Will try when I'm back in the office
Open in new window
The properties. But there is a watch-it here - the third entry has an array of entries so you would need to account for that in your outputOpen in new window