PHP怎么接收XML带处理指令数据_PHP接收XML带处理指令数据的方式【实例】

admin 百科 15
PHP解析含XML声明或处理指令的XML数据需采用DOMDocument启用PI支持、正则预处理剥离PI、XMLReader流式识别PI节点,或屏蔽libxml错误强制加载四种方式。

PHP怎么接收XML带处理指令数据_PHP接收XML带处理指令数据的方式【实例】-第1张图片-佛山资讯网

如果PHP脚本需要解析包含XML声明或处理指令(如php echo 'test'?>)的XML数据,直接使用simplexml_load_string或DOMDocument::loadXML可能因默认禁止外部实体或忽略处理指令而失败。以下是接收并正确处理此类XML数据的多种方式:

一、使用DOMDocument并启用加载处理指令

DOMDocument默认会忽略XML处理指令(PI),但可通过设置substituteEntitiesrecover选项,并在加载时保留PI节点。需显式允许加载处理指令,且避免因格式错误中断解析。

1、创建DOMDocument实例,设置preserveWhiteSpace为false以减少空白干扰。

2、调用loadXML()方法前,将substituteEntities设为true,recover设为true。

立即学习“PHP免费学习笔记(深入)”;

3、遍历childNodes,检查节点类型是否为XML_PI_NODE(常量值为7),提取处理指令目标与数据。

4、对XML主体内容继续使用getElementsByTagName或XPath进行结构化解析。

二、预处理XML字符串剥离或保留处理指令

当XML数据中混有非标准处理指令(如自定义PHP PI)且不希望DOM解析器报错时,可先对原始字符串做正则预处理,将处理指令提取至独立变量或替换为占位符,再交由XML解析器处理主体。

1、使用preg_match_all('//', $raw, $pis)捕获全部处理指令字符串。

2、用preg_replace('//', '', $raw)移除所有PI,获得纯净XML正文。

3、将$raw传入simplexml_load_string()完成标准解析。

4、将$pis[0]数组保存用于后续业务逻辑判断(如识别特定配置指令)。

标签: php node 编码 xml解析 xml处理 内存占用 php解析 php脚本

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~