XML parse

the followings are XML sample code.

<m:ad xmlns:m="http://www.w3c.org/soap">
    <title><![CDATA[TITLE]]></title>
    <phone>123456789</phone>
    <attributeGroup>
       <attribute id="14" name="A1">40</attribute>
       <attribute id="15" name="A2">50</attribute>
   </attributeGroup>
</m:ad>

I only know PHP XMLReader to get value

while ( $reader->read() ) {
  if (  $reader->nodeType ==XMLReader::ELEMENT && $reader->name == "attribute" ) {
    printf("id=%s, name=%s\
", $reader->getAttribute('id'), $reader->getAttribute('name'));
  }
}

But how to get attribute A1, A2 . I would like to get 40, and 50 both .Like this

id=14, name=A1, value 40
id=15, name=A2, value 50

Use value property to get the value of the node.


while ( $reader->read() ) {
  if (  $reader->nodeType ==XMLReader::ELEMENT && $reader->name == "attribute" ) {
    printf("id=%s, name=%s value=%s\
", $reader->getAttribute('id'), $reader->getAttribute('name'), $reader->value);
  }
}

thanks for your comment But nothing show. I have tried it however it does not work successfully.
help me please

My mistake, it’s value of TEXT subnode of attribute node, you want. Something like this should work


while ( $reader->read() ) {
  if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'attribute') {
    $DOMNode = $reader->expand();
    printf("id=%s, name=%s value=%s\
", $reader->getAttribute('id'), $reader->getAttribute('name'), $DOMNode->textContent); 
  }
} 

Or readString().