我有一个具有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
值。
我该怎么做? 谢谢!!!