【问题标题】:Converting XML to Object and Preserve HTML将 XML 转换为对象并保留 HTML
【发布时间】:2015-04-29 03:43:09
【问题描述】:

我有一个如下所示的 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 包装在 &lt;![CDATA[ ]]&gt; 中,但我只收到一个空的更改日志对象。在解析我的 XML 文件时,我可以做些什么来保留我的 HTML?

【问题讨论】:

    标签: php html xml json parsing


    【解决方案1】:

    你需要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);
    

    【讨论】:

    • 这非常有效!您能否编辑并添加更多信息,说明为什么我需要为未来的读者添加这些额外信息?
    猜你喜欢
    • 2011-09-26
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多