我在阅读格式为<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替换方法吗?
答案 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);