使用PHP XMLReader检测XML自动关闭标记
我想使用XMLReader解析一个XML文档。我有一个带有所有常量的case开关。然而,若标记是自动关闭的,那个么XMLReader只会激发元素,而不会像预期的那个样激发元素和结束元素 通过类属性$isEmptyElement进行检测也不起作用,因为标记具有属性 因此,我的问题是:如何在PHP中使用XMLReader检测自动关闭的XML标记? 相关但无解决方案: 示例节点:使用PHP XMLReader检测XML自动关闭标记,php,xml,libxml2,xmlreader,Php,Xml,Libxml2,Xmlreader,我想使用XMLReader解析一个XML文档。我有一个带有所有常量的case开关。然而,若标记是自动关闭的,那个么XMLReader只会激发元素,而不会像预期的那个样激发元素和结束元素 通过类属性$isEmptyElement进行检测也不起作用,因为标记具有属性 因此,我的问题是:如何在PHP中使用XMLReader检测自动关闭的XML标记? 相关但无解决方案: 示例节点: <mynode name="somenamestring" code="intstring" option="in
<mynode name="somenamestring" code="intstring" option="intstring3"/>
通过类属性$isEmptyElement进行检测也不起作用,因为标记具有属性
这完全是错误的。带有属性的空元素仍然是空的,$isEmptyElement
将反映这一点。代码的问题在于,在移动到属性后测试$isEmptyElement
。这会将当前节点更改为不是空元素的属性节点。类似于以下的方法应该可以工作:
$isEmpty = $xmlReader->isEmptyElement;
if ($xmlReader->hasAttributes) {
while ($xmlReader->moveToNextAttribute()) {
...
}
}
if ($isEmpty) {
$xmlWriter->endElement();
}
或者,或者:
if ($xmlReader->hasAttributes) {
while ($xmlReader->moveToNextAttribute()) {
...
}
$xmlReader->moveToElement();
}
if ($xmlReader->isEmptyElement) {
$xmlWriter->endElement();
}
如果是这样的话,我会很高兴,不幸的是,对于以下节点,它返回false:您在创建读卡器时设置了任何选项吗?然而,$hasValue是真的,但这并没有帮助,因为有很多没有值的非自动关闭标记。那么我一定是犯了一些其他错误。我加了密码,你能帮我看一下吗?
if ($xmlReader->hasAttributes) {
while ($xmlReader->moveToNextAttribute()) {
...
}
$xmlReader->moveToElement();
}
if ($xmlReader->isEmptyElement) {
$xmlWriter->endElement();
}