没有不值得去解决的问题,也没有不值得去学习的技术!

xml 数据的解析的重构

删除函数:libxml_disable_entity_loader。不转换为数组。直接使用对象。LIBXML_NOCDATA 表示 将 CDATA 合并为文本节点

1、xml 数据打印如下。如图1

xml 数据打印如下
图1
XML
<xml>
    <AppId>
        <![CDATA[wxd98c58b273d21bdf]]>
    </AppId>
    <CreateTime>1626662709</CreateTime>
    <InfoType>
        <![CDATA[component_verify_ticket]]>
    </InfoType>
    <ComponentVerifyTicket>
        <![CDATA[ticket@@@bVAZ8WK0CCTWNowBEfvH7SWIRiPhoeNVczaOnAiPN8fzN2tNrxNK_mzJaUd-WFslGAyl6cSR1ryUinlthRQ0SA]]>
    </ComponentVerifyTicket>
</xml>

2、现阶段是将 xml 转换为 数组。代码实现如下。libxml_disable_entity_loader 函数已自 PHP 8.0.0 起被废弃。强烈建议不要依赖本函数。

PHP

libxml_disable_entity_loader(true);
$values = Json::decode(Json::encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);

3、转换为数组后,打印结果如下。如图2

转换为数组后,打印结果如下
图2
Plaintext

Array
(
    [AppId] => wxd98c58b273d21bdf
    [CreateTime] => 1626662709
    [InfoType] => component_verify_ticket
    [ComponentVerifyTicket] => ticket@@@bVAZ8WK0CCTWNowBEfvH7SWIRiPhoeNVczaOnAiPN8fzN2tNrxNK_mzJaUd-WFslGAyl6cSR1ryUinlthRQ0SA
)


4、删除函数:libxml_disable_entity_loader。不转换为数组。直接使用对象。LIBXML_NOCDATA 表示 将 CDATA 合并为文本节点。如图3

删除函数:libxml_disable_entity_loader。不转换为数组。直接使用对象。LIBXML_NOCDATA 表示 将 CDATA 合并为文本节点
图3
PHP

$values = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
print_r($values);
echo $values->AppId;
exit;

Plaintext

SimpleXMLElement Object
(
    [AppId] => wxd98c58b273d21bdf
    [CreateTime] => 1626662709
    [InfoType] => component_verify_ticket
    [ComponentVerifyTicket] => ticket@@@bVAZ8WK0CCTWNowBEfvH7SWIRiPhoeNVczaOnAiPN8fzN2tNrxNK_mzJaUd-WFslGAyl6cSR1ryUinlthRQ0SA
)
wxd98c58b273d21bdf

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系