通过PHP XMLReader解析XML属性

use*_*396 2 php xml

以下是XML示例代码.

<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>
Run Code Online (Sandbox Code Playgroud)

我只知道PHP XMLReader来获取价值

$reader = new XMLReader();        
if ($reader->name == "title" && $reader->nodeType ==XMLReader::ELEMENT) {
    echo $reader2->read(); // will get TITLE   
 }
Run Code Online (Sandbox Code Playgroud)

但是如何获得属性A1,A2.我想得到40和50两个.

Vol*_*erK 5

$reader = new XMLReader();
$reader->xml('<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>');


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

版画

id=14, name=A1
id=15, name=A2
Run Code Online (Sandbox Code Playgroud)

  • 我最后使用`$ reader-> attributeCount`然后使用`for()`循环使用`$ reader-> moveToAttributeNo()`依次读取每个属性.这使我可以访问所有属性,而无需事先知道它们将是什么. (5认同)