XMLReader-无法从XML读取简单数据

时间:2018-07-07 15:29:41

标签: php xml xml-parsing xmlreader

我有一个具有followind结构的xml:

<Database>
   <row>
      <item1>value</item1>
      <item2>value</item2>
      ......
      <anotheremptyitem></anotheremptyitem>
      <itemwithcdata><![CDATA[
          example data
          sample data
          some data
      ]]></itemwithcdata>
   </row>
   <row>
      <item1>aaaaa</item1>
      <item2>13</item2>
      ......
      <anotheremptyitem></anotheremptyitem>
      <itemwithcdata><![CDATA[
          example 2 data
          sample 3 data
          some 4 data
      ]]></itemwithcdata>
   </row>
   ...
</Database>

我没有属性或其他类型的嵌套数据。只是带有项目的行(如数据库行)。

我不知道如何将这些行存储到数组中。我不想使用simplexml,因为此文件可能很大,并且我不想使用dom或simplexml将行存储到数组中(因为我阅读这些文件比直接使用XMLReader读取要慢)。

所以...我试图从文件中读取这些行:

while($this->reader->name === "row") {
  $node = [];
  $was_name = false;
  while($this->reader->read() && $this->reader->name !== 'row') {
    if($this->reader->name != "#text" && $was_name == false) {
      $key = $this->reader->name;
      $was_name = true;
    } elseif(isset($key) && !isset($node[$key]) && $was_name == true && isset($this->reader->value)) {
        $node[$key] = $this->reader->value;
        $was_name = false;
        $key = null;
    }
  }
  print_r($node);
}

但不起作用。我看到每个开始和结束标签都被读取,所以我尝试检查名称是否已经在数组中……但是似乎如果node为空,那么只会读取开始标签。同样,如果某些节点不在同一行上,那么也会分别获取一个\n值。

我该怎么做? 谢谢!!!

0 个答案:

没有答案