I'm trying to return the value of the typeName key inside this object (xml).
[geometricProperty] => Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[typeName] => localizacao // < - - - This is the value I need.
)
[Point] => SimpleXMLElement Object
(
[#attributes] => Array
(
[ID] => swrefVgetZredeVcollX757678785
[srs] => ut_cm
)
[coordinates] => 38871,739716
)
)
[1] => SimpleXMLElement Object
(
[#attributes] => Array
(
[typeName] => limite
)
[Polygon] => SimpleXMLElement Object
(
[#attributes] => Array
(
[ID] => swrefVgeometryV08945038
[srs] => utm_23_cm
)
[outerBoundaryIs] => SimpleXMLElement Object
(
[LinearRing] => SimpleXMLElement Object
(
[coordinates] => 318950,7399585 31981,39650 31826,73990 316956,79750
)
)
)
)
...
I've tried the following but it returns NULL
echo "<p>This object has ".(count($n->Feature->geometricProperty))." items.</p>";
$c=0;
foreach($n->Feature->geometricProperty as $k){
$c++;
echo "<p>$c)".(gettype($k))."</p>";
foreach(array_keys(get_object_vars($k)) as $o){
echo "<p>$o</p>";
switch($o){
case "#attributes": var_dump($k->{$o}["typeName"]); $tipo=$k->{$o}["typeName"]; break;
case "Point": $value=$k->{$o}->coordinates; break;
case "Polygon": $value=$k->{$o}->outerBoundaryIs->LinearRing->coordinates; break;
case "Line...": break;
}
}
echo "<p>TIPO: $tipo</p><p>VALOR: $value</p>";
}
OUTPUT:
This object has 3 items.
1)object
#attributes
NULL
Point
TIPO:
VALOR: 31869871,739796106
2)object
#attributes
NULL
Polygon
TIPO:
Search and found this overflow question and can't guess what am I doing wrong.
You can use SimpleXmlElement::attributes() to get an array of attributes. So then you would just loop over them and display them or use implode or something... depending on the output you want.
Related
First array:
[VariationSpecificsSet] => SimpleXMLElement Object
(
[NameValueList] => Array
(
[0] => SimpleXMLElement Object
(
[Name] => Size
[Value] => Array
(
[0] => 5FT King Size
[1] => 4FT6 Double
)
)
[1] => SimpleXMLElement Object
(
[Name] => Main Colour
[Value] => Array
(
[0] => Brown
[1] => Black
)
)
)
)
Second Array:
[Variation] => SimpleXMLElement Object
(
[StartPrice] => 14.99
[Quantity] => 12
[VariationSpecifics] => SimpleXMLElement Object
(
[NameValueList] => SimpleXMLElement Object
(
[Name] => Size
[Value] => No.10-1M
)
)
)
examine above two arrays
i want to store value NameValueList in database but the problem is sometimes it is SimpleXMLElement Object and sometimes it is Array
how can i store them ...??
You can detect is by is_array().
$myVal=$test['NameValueList'];
if(is_array($myVal) && count($myVal)>0){
foreach($myVal as $item){
echo $item->Name.":".echo $item->Value;
}
} else {
echo $myVal->Name.":".echo $myVal->Value;
}
Did you tried using json_encode like below.
You can convert the object to array.
$array=json_decode(json_encode($object),true);
AI have an XML which have attributes as well as values in them. I want to convert it to an Array or Array Object along with attributes and values.
XML
<?xml version="1.0" encoding="UTF-8"?>
<itemBody>
<div label="options">
<optionchoices optionIdentifier="RESPONSE" shuffle="false" maxOptions="1">
<choice identifier="A1"><![CDATA[aaaa]]></choice>
<choice identifier="A2"><![CDATA[bbbb]]></choice>
<choice identifier="A3"><![CDATA[cccc]]></choice>
</optionchoices>
</div>
</itemBody>
I tried two set of code but the result was not as expected.
Code 1
<?php
$xml = simplexml_load_file('test.xml', 'SimpleXMLElement', LIBXML_NOCDATA);
echo "<pre>";print_r($xml);echo "</pre>"; exit;
?>
Output
SimpleXMLElement Object
(
[div] => SimpleXMLElement Object
(
[#attributes] => Array
(
[label] => options
)
[optionchoices] => SimpleXMLElement Object
(
[#attributes] => Array
(
[optionIdentifier] => RESPONSE
[shuffle] => false
[maxOptions] => 1
)
[choice] => Array
(
[0] => aaaa
[1] => bbbb
[2] => cccc
)
)
)
)
In the above output if we check then in choice node we get the values only and not the attributes
Code 2
<?php
$xml = simplexml_load_file('test.xml');
echo "<pre>";print_r($xml);echo "</pre>"; exit;
?>
Output
SimpleXMLElement Object
(
[div] => SimpleXMLElement Object
(
[#attributes] => Array
(
[label] => options
)
[optionchoices] => SimpleXMLElement Object
(
[#attributes] => Array
(
[optionIdentifier] => RESPONSE
[shuffle] => false
[maxOptions] => 1
)
[choice] => Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[identifier] => A1
)
)
[1] => SimpleXMLElement Object
(
[#attributes] => Array
(
[identifier] => A2
)
)
[2] => SimpleXMLElement Object
(
[#attributes] => Array
(
[identifier] => A3
)
)
)
)
)
)
In this output we get only attributes of XML.
Now what I want is to obtain Attributes as well as Values of the XML.
Please help.
Thanks in advance.
This is what I got. And this is the solution which I expected.
http://outlandish.com/blog/xml-to-json/
I have an object that spits out this if i run this code:
print_r($xml->config->Exported->stats->children() );
SimpleXMLElement Object
(
[Stat] => Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[Name] => Name
[abrev] =>
[format] => 2
)
)
[1] => SimpleXMLElement Object
(
[#attributes] => Array
(
[Name] => Hands
[abrev] => H:
[format] => 0
)
)
[2] => SimpleXMLElement Object
(
[#attributes] => Array
(
[Name] => V.total
[abrev] => V:
[format] => 0
)
)
)
My code is:
foreach($xml->config->Exported->stats->children() as $node){
echo $node . "<br />";
switch ( $node->getName() )
{
case 'Stat':
$stat_name = (string)$node['name'];
echo $stat_name . " | ";
break;
case 'New_Line':
echo '<hr />';
break;
}
Which should return something like this:
http://codepad.viper-7.com/hMvg9W
While that does work my code does not. Does the simple xml output differ from the standard xml output in the example that works, any idea how i tweak this to get it to work?
XML is case sensitive. "Name" and "name" are different qualified names.
I am parsing the array given below. Looping through td using foreach. Now i want to select the value other than [#attributes]. I cannot use a or p specifically as they change through out the objects.
How can i achieve this?
[0] => SimpleXMLElement Object
(
[th] => SimpleXMLElement Object
(
[#attributes] => Array
(
[rowspan] => 2
[scope] => row
)
[p] => Memory
)
[td] => Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[class] => ttl
)
[a] => Card slot
)
[1] => SimpleXMLElement Object
(
[#attributes] => Array
(
[class] => nfo
)
[p] => No
)
)
)
Want the solution to work in php.
Try below one
<?php
foreach($td as $element)
{
foreach($element as $key => $value)
{
if(!preg_match("/#/", $key) && !is_array($value))
echo $element[$key];
}
}
?>
I have the following xml to be parsed.
Array
(
[0] => SimpleXMLElement Object
(
[#attributes] => Array
(
[rel] => http://schemas.google.com/g/2005#other
[address] => xyz#gmail.com
[primary] => true
)
)
[1] => SimpleXMLElement Object
(
[#attributes] => Array
(
[rel] => http://schemas.google.com/g/2005#other
[address] => abc#gmail.com
[primary] => true
)
)
)
I have this above xml and I need to get only adress from this xml.
foreach ($result as $title) {
$email[$count++]=$title->attributes()->address->__toString;
}
debug($email);
The result is this. But I want only address . need some help.
Array
(
[0] => SimpleXMLElement Object
(
)
[1] => SimpleXMLElement Object
(
)
)
see : http://www.php.net/manual/en/simplexmlelement.attributes.php
Return Values
Returns a SimpleXMLElement object that can be iterated over to loop through the attributes on the tag.
the solution is to cast the value into string,
for example :
$email[$count++]=(string)$title->attributes()->address;
Or iterate the return value will work as well
eg:
foreach($title->attributes() as $key => $val)
{
if ($key == 'address') $email[$count++] = $val;
}