- 广场
-
- 搜索中...
- 本文档内搜索
zxf/tools 使用手册
XML 解析和转换
ArrayToXml(数组转XML字符串)
use zxf\Xml\Array2XML;
$xml = Array2XML::createXML($array,?'root_node_name', ?$attr, ?$docType);
echo $xml->saveXML();
1、普通数组转XML => createXML 方法
$array = [
'Good_guy' => [
'name' => 'Luke Skywalker',
'weapon' => 'Lightsaber'
],
'Bad_guy' => [
'name' => 'Sauron',
'weapon' => 'Evil Eye'
]
];
$xml = Array2XML::createXML($array,'root',[
'version' => '1.0',
'encoding' => 'UTF-8',
'standalone' => true,
'formatOutput' => true
]);
echo $xml->saveXML();
2、转微信文档中示例的 XML 数据 => createWechatXML 方法
// 输入数组数据
$data = [
'ToUserName' => 'toUser',
'FromUserName' => 'fromUser',
'CreateTime' => 12345678, // int 类型的数据 转换后不会携带CDATA
'MsgType' => 'text',
'Content' => 'Hello World'
];
$xml = Array2XML::createWechatXML($data);
echo $xml;
得到
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[Hello World]]></Content>
</xml>
XmlToArray(XML 转数组)
use zxf\Xml\XML2Array;
/**
* XML解析器
*
* 主要特性:
* 1. 可控的外层节点保留/移除
* 2. 增强的流式处理能力
* 3. 智能内存管理
* 4. 多层级错误处理
* 5. 支持XML注释处理
*/
/**
* @example
* 1、支持解析微信官方文档中示例的 XML 数据
* <xml>
* <ToUserName><![CDATA[toUser]]></ToUserName>
* <FromUserName><![CDATA[fromUser]]></FromUserName>
* <CreateTime>12345678</CreateTime>
* <MsgType><![CDATA[text]]></MsgType>
* <Content><![CDATA[Hello World]]></Content>
* </xml>
*
* 2、支持解析普通的xml 字符串
* <catalog>
* <book>
* <title>PHP 手册</title>
* <author>张三</author>
* </book>
* <book>
* <title>Laravel 高级开发</title>
* <author>李四</author>
* </book>
* </catalog>
*
* 1、示例化后调用
* $parser = new XML2Array();
* // 或者定义配置
* // $parser = new XML2Array(['preserveRootNode' => false]);
* $result = $parser->parse('<root><item>value</item></root>'); // 解析XML字符串为数组
* // 获取统计信息
* $stats = $parser->getStats();
* print_r($stats);
* 2、静态调用
* XML2Array::toArray('<root><item>value</item></root>');
*/
默认的配置参数
[
'attributePrefix' => '@', // 属性前缀
'textNodeName' => '#text', // 文本节点名称
'commentNodeName' => '#comment', // 注释节点名称
'autoArray' => false, // 自动创建数组
'namespaceHandling' => 'remove', // 三种命名空间处理模式:none(忽略)、remove(移除前缀)、preserve(保留)
'parseAttributes' => true, // 解析属性
'parseComments' => false, // 是否解析注释
'trimValues' => true, // 修剪值
'typeDetection' => true, // 启用类型检测
'encoding' => 'UTF-8', // 默认编码
'preserveRootNode' => false, // 是否保留根节点
'removeXmlDeclaration' => true, // 是否移除XML声明
'libxmlOptions' => LIBXML_NOCDATA | LIBXML_NOBLANKS | LIBXML_NONET | LIBXML_COMPACT | LIBXML_PARSEHUGE,
'maxDepth' => 50, // 最大递归深度
'validateOnParse' => false, // 启用XML验证
'schemaValidation' => false, // 使用XSD验证
'schemaPath' => null, // XSD文件路径
'memoryLimit' => null, // 内存限制(字节)
];