XMLReader跳过父节点

问题描述 投票:0回答:1

来自the documentation

XMLReader扩展名是XML提取解析器。阅读器充当光标,在文档流上前进,并在途中停在每个节点上]

我想转到下一个,但父节点<group>阻止了我。

XML结构

<group name="blabla">
 <o>
  <id>Value</id>
  <name>Value</name>
  <category>Value</category>
 </o>
 <o>
  <id>Value</id>
  <name>Value</name>
  <category>Value</category>
 </o>
 <o>
  <id>Value</id>
  <name>Value</name>
  <category>Value</category>
 </o>
</group>
<group name="blabla">
 <o>
  <id>Value</id>
  <name>Value</name>
  <category>Value</category>
 </o>
 <o>
  <id>Value</id>
  <name>Value</name>
  <category>Value</category>
 </o>
 <o>
  <id>Value</id>
  <name>Value</name>
  <category>Value</category>
 </o>
</group> etc..

我想转到下一个,但父节点阻止了我。

<?php
$reader = new XMLReader();
$reader->open($fileTMP);

while (true) {
    if ($reader->nodeType === XMLReader::ELEMENT
        && $reader->name === XML_PRODUCT_ELEMENT_NAME
        && $reader->isEmptyElement === false) {

        $item = simplexml_load_string($reader->readOuterXML(), null, LIBXML_NOCDATA);

        $product = [];
        $product['id'] = trim((string) $item->id);
        $product['name'] = trim((string) $item->name);

        if (isset($item->imgs->i)) {
            foreach ($item->imgs as $image) {
                $product['foto'][] = trim((string) $image->i['url']);
            }
        }

        if (!$reader->next(XML_PRODUCT_ELEMENT_NAME)) {
            break;
        }
    } else if (!$reader->read()) {
        break;
    }
}

$reader->close();

摘自文档:XMLReader扩展是XML提取解析器。阅读器充当光标,在文档流上前进,并在我要转到下一个的途中在每个节点处停止...

php xml xmlreader
1个回答
0
投票

我认为您的主要问题是何时到达

© www.soinside.com 2019 - 2024. All rights reserved.