将 XML 转换为对象并保留 HTML

Converting XML to Object and Preserve HTML

我有一个 XML 文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<plugins>
    <plugin>
        <name>Test</name>
        <changelog>
            <ul>
                <li>Test</li>
                <li>Test 2</li>
                <li>Test 3</li>
            </ul>
        </changelog>
    </plugin>
</plugins>

现在我要做的是将其转换为 PHP 对象,同时保留 HTML。这是我阅读 XML:

的方式
$simpleXML_plugin_objs  = simplexml_load_file( 'plugins.xml' );
$plugin_obj_arr         = json_decode( json_encode( $simpleXML_plugin_objs ) );

并得到以下内容:

stdClass Object (
    [plugin] => Array (
        [0] => stdClass Object (
            [name] => Test
            [changelog] => stdClass Object (
                [ul] => stdClass Object (
                    [li] => Array (
                        [0] => Test
                        [1] => Test 2
                        [2] => Test 3
                    )
                )
            )
        )
    )
)

我尝试将 HTML 包装在 <![CDATA[ ]]> 中,但随后我只收到一个空的更新日志对象。每当解析我的 XML 文件时,我该怎么做才能保留我的 HTML?

您需要 LIBXML_NOCDATA 选项:

simplexml_load_file( 'plugins.xml', 'SimpleXMLElement' , LIBXML_NOCDATA );

CDATA 部分即使没有此选项也会加载:

$changelog = $simpleXML_plugin_objs->children()->children();
echo $changelog[1];

但它们并没有成为常规对象变量,所以 json_encode()print_r() 和其他检查函数将它们视为空 SimpleXMLElement 对象:

print_r($simpleXML_plugin_objs);