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

时间:2011-11-23 14:11:38

标签: 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;...

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

2 个答案:

答案 0 :(得分:8)

XMLReader中存在一个问题。

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

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

但是,如果您使用自我结束标记:<test />

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

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

答案 1 :(得分:0)

请尝试:

$result = preg_replace('%<EanCode/>%', '<EanCode></EanCode>', $string);

您还可以检查元素是否为空:

$xml = new XMLReader();
$xml->XML('<tag attr="value" />');
$xml->read();
var_dump($xml->isEmptyElement);