相关疑难解决方法(0)

使用 PHP XMLReader 检测 XML 自关闭标签

我想使用 XMLReader 解析一个 XML 文档。我有一个带有所有常量的案例开关。但是,如果标签是自关闭的 XMLReader 只触发 ELEMENT,而不是像预期的那样触发 ELEMENT 和 END_ELEMENT。

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

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

相关但没有解决方案: XmlReader - 自关闭元素不会触发 EndElement 事件?

示例节点:

<mynode name="somenamestring" code="intstring" option="intstring3"/>
Run Code Online (Sandbox Code Playgroud)

我的代码:

$xmlReader->open($url,NULL);
$xmlWriter = new XMLWriter();
$xmlWriter->openMemory();
$xmlWriter->startDocument('1.0', 'UTF-8');
$xmlWriter->setIndent(true);
$xmlWriter->setIndentString('    ');
while ($xmlReader->read()) {
    switch ($xmlReader->nodeType) {
        case 1: #element
            $xmlWriter->startElement($xmlReader->name);
            if ($xmlReader->hasAttributes) {
                while ($xmlReader->moveToNextAttribute()) {
                    $xmlWriter->writeAttribute($xmlReader->name,$xmlReader->value);
                }
            }
            if ($xmlReader->isEmptyElement) {
                $xmlWriter->endElement();
            }
            break;

        case 3: #text
            $xmlWriter->text($xmlReader->value);
            break;

        case 4: #cdata
            $xmlWriter->writeCData($xmlReader->value);
            break; …
Run Code Online (Sandbox Code Playgroud)

php xml xmlreader libxml2

3
推荐指数
1
解决办法
1110
查看次数

标签 统计

libxml2 ×1

php ×1

xml ×1

xmlreader ×1