当前位置: 首页 » 知识 » PHP处理XML数据及转JSON数组simplexml_load_file和simplexml_load_string

PHP处理XML数据及转JSON数组simplexml_load_file和simplexml_load_string

零分知识1,4492023-02-22 12:42

转换 XML 文件为 SimpleXMLElement 对象,然后输出对象的键和元素:

<?php
$xml=simplexml_load_file("note.xml");
print_r($xml);
?>

以上代码在实际处理中可能会遇到数据丢失,SSL出错等情况,所以使用simplexml_load_string

simplexml_load_string:转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素:

<?php
$note=<<<XML
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML;
 
$xml=simplexml_load_string($note);
print_r($xml);
?>

在请求XML链接时,先用curl获取xml源码

$url="";
$xmldata = curl_get($url);
$xml=simplexml_load_string($xmldata );

在实际使用中,可能还会遇到数据丢失的情况,所给simplexml_load_string加上对象classname和options

$url="";
$xmldata = curl_get($url);
$xml=simplexml_load_string($xmldata,"SimpleXMLElement",LIBXML_NOCDATA);

数据转成json格式:

$url="";
$xmldata = curl_get($url);
$xml=json_decode(json_encode(simplexml_load_string($xmldata,"SimpleXMLElement",LIBXML_NOCDATA)));

simplexml_load_string和simplexml_load_file参数:

参数描述
data必需。规定形式良好的 XML 字符串。(simplexml_load_file是xml的链接url)
classname可选。规定新对象的 class。
options可选。规定附加的 Libxml 参数。通过指定选项为 1 或 0(TRUE 或 FALSE,例如 LIBXML_NOBLANKS(1))进行设置。
可能的值:
。LIBXML_COMPACT – 激活节点的优化配置(可加速应用程序)
。LIBXML_DTDATTR – 设置默认的 DTD 属性
。LIBXML_DTDLOAD – 装载额外的子集
。LIBXML_DTDVALID – 验证 DTD 有效性
。LIBXML_NOBLANKS – 删除空节点
。LIBXML_NOCDATA – 将 CDATA 设置为文本节点
。LIBXML_NOEMPTYTAG – 扩展空标签(例如到),仅在 DOMDocument->save() 和 DOMDocument->saveXML() 函数中有效
。LIBXML_NOENT – 替代实体
。LIBXML_NOERROR – 不显示错误报告
。LIBXML_NONET – 装载文档时停止访问网络
。LIBXML_NOWARNING – 不显示警告报告
。LIBXML_NOXMLDECL – 当存储一个文档时放弃 XML 声明
。LIBXML_NSCLEAN – 删除多余的名称空间声明
。LIBXML_PARSEHUGE – 设置 XML_PARSE_HUGE 标志,用来放宽解析器的任何强制限制。这将影响诸如文档的最大深度和文本节点大小限制等。
。LIBXML_XINCLUDE – 使用 XInclude 替代
。LIBXML_ERR_ERROR – 获取可纠正的错误
。LIBXML_ERR_FATAL – 获取致命错误
。LIBXML_ERR_NONE – 不获取错误
。LIBXML_ERR_WARNING – 获取简单警告
。LIBXML_VERSION – 获取 libxml 版本(例如 20605 或 20617)
。LIBXML_DOTTED_VERSION – 获取带点的 libxml 版本(例如 2.6.5 或 2.6.17)
ns可选。规定命名空间前缀或 URI。
is_prefix可选。规定一个布尔值。如果 ns 是前缀则为 TRUE,如果 ns 是 URI 则为 FALSE。默认是 FALSE。
END
零分站龄17年资深站长
一个喜欢折腾,却又折腾不出像样东西的,不会PHP的PHP程序员!
2517
文章
13
分类
3818
标签
3
友链
onlinelovesky317355746vipsever@vip.qq.com