tags:

views:

1191

answers:

2

Hi,

Sorry if this seems like an easy question, but I've started pulling hair out on this...

I have a XML file which looks like this...

<VAR VarNum="90">
  <option>1</option>
</VAR>

I'm trying to get the VarNum.

So far I've been successful using the follow code to get the other information:

$xml=simplexml_load_file($file);
$option=$xml->option;

I just can't get VarNum (the attribute value I think?)

Thanks!

+4  A: 

What about using $xml['VarNum'] ?

Like this :

$str = <<<XML
<VAR VarNum="90">
  <option>1</option>
</VAR>
XML;

$xml=simplexml_load_string($str);
$option=$xml->option;

var_dump((string)$xml['VarNum']);

(I've used simplexml_load_string because I've pasted your XML into a string, instead of creating a file ; what you are doing with simplexml_load_file is fine, in your case !)

Will get you

string '90' (length=2)

With simpleXML, you access attributes with an array syntax.
And you have to cast to a string to get the value, and not and instance of SimpleXMLElement

For instance, see example #5 of Basic usage in the manual :-)

Pascal MARTIN
Note: the casting to (string) in the example.
null
@null : (nice nichname, by the way ^^) : Thanks! I eddited to add that (and a couple more precisions)
Pascal MARTIN
The cast to string is very important when accessing the attributes of a node. We saw some funky behavior (empty value) when we failed to include the cast.
shambleh
Thanks for the reply!
Matt
+4  A: 

You should be able to get this using SimpleXMLElement::attributes()

Try this:

$xml=simplexml_load_file($file);
foreach($xml->Var[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}

That will show you all the name/value attributes for the first foo element. It's an associative array, so you can do this as well:

$attr = $xml->Var[0]->attributes();
echo $attr['VarNum'];
zombat
Hi. Thanks for the reply. When I try this I get the following error - "Fatal error: Call to a member function attributes() on a non-object"
Matt
Thanks! I was able to get this working (it was a syntax error - doh!)Thanks again!
Matt