使用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

我想使用XMLReader解析一个XML文档。我有一个带有所有常量的case开关。然而,若标记是自动关闭的,那个么XMLReader只会激发元素,而不会像预期的那个样激发元素和结束元素

通过类属性$isEmptyElement进行检测也不起作用,因为标记具有属性

因此,我的问题是:如何在PHP中使用XMLReader检测自动关闭的XML标记?

相关但无解决方案:

示例节点:

<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();
        }