XmlReader无法读取这些类似Chrome阅读器的空节点

use*_*015 1 php xmlreader

我有一个问题,阅读格式化的空元素<eanCode/>.在此元素之后,XmlReader类无法读取下一个元素.

<EanCode/><Stock>15</Stock>

if ($reader->nodeType == XMLReader::ELEMENT) {
            switch ($reader->name) {

           case 'Stock':
                    $reader->read();
                    $stock = $reader->value;
            ECHO 'stokkk adet = '. $stock;
                    break;...
Run Code Online (Sandbox Code Playgroud)

所以,我决定<eanCode/><eanCode></eanCode>.但是编写算法很困难.有人可以提供相应的preg替换方法吗?

And*_*rew 8

XMLReader中存在一个问题.

如果你有一个像这样的空元素: <test></test>

你会得到一个元素和一个END_ELEMENT.

但是,如果您使用自闭标签: <test />

你只得到一个元素,没有END_ELEMENT.

一个简单的解决方案是检查$xmlReader->isEmptyElement每个ELEMENT NODE.这将允许您知道它是否是自闭标签,然后您可以跳过它.

  • 我不会称之为"问题"(没有结束标记 - 替代方案是什么?)但这个答案有正确的解释和适当的解决方案. (3认同)