php xml怎么转化成json
2022-12-02 09:01:16
94
{{single.collect_count}}

php xml转化成json的方法:1、创建一个PHP示例文件;2、找到需要转换的xml文件;3、通过“function xmlToArray($xml, $options = array()) {...}”方法将其转换成json即可。

php入门到就业线上直播课:进入学习
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API调试工具:点击使用

本文操作环境:Windows7系统、PHP7.1版本、Dell G3电脑

php xml怎么转化成json?

XML 转 JSON

以下代码演示了如何将一个 xml 文件的数据转换为 Json 格式数据:

function xmlToArray($xml, $options = array()) {$defaults = array('namespaceSeparator' => ':',//you may want this to be something other than a colon'attributePrefix' => '@', //to distinguish between attributes and nodes with the same name'alwaysArray' => array(), //array of xml tag names which should always become arrays'autoArray' => true,//only create arrays for tags which appear more than once'textContent' => '$', //key used for the text content of elements'autoText' => true, //skip textContent key if node has no attributes or child nodes'keySearch' => false, //optional search and replace on tag and attribute names'keyReplace' => false //replace values for above search values (as passed to str_replace()));$options = array_merge($defaults, $options);$namespaces = $xml->getDocNamespaces();$namespaces[''] = null; //add base (empty) namespace //get attributes from all namespaces$attributesArray = array();foreach ($namespaces as $prefix => $namespace) {foreach ($xml->attributes($namespace) as $attributeName => $attribute) {//replace characters in attribute nameif ($options['keySearch']) $attributeName =str_replace($options['keySearch'], $options['keyReplace'], $attributeName);$attributeKey = $options['attributePrefix']. ($prefix ? $prefix . $options['namespaceSeparator'] : ''). $attributeName;$attributesArray[$attributeKey] = (string)$attribute;}} //get child nodes from all namespaces$tagsArray = array();foreach ($namespaces as $prefix => $namespace) {foreach ($xml->children($namespace) as $childXml) {//recurse into child nodes$childArray = xmlToArray($childXml, $options);list($childTagName, $childProperties) = each($childArray); //replace characters in tag nameif ($options['keySearch']) $childTagName =str_replace($options['keySearch'], $options['keyReplace'], $childTagName);//add namespace prefix, if anyif ($prefix) $childTagName = $prefix . $options['namespaceSeparator'] . $childTagName; if (!isset($tagsArray[$childTagName])) {//only entry with this key//test if tags of this type should always be arrays, no matter the element count$tagsArray[$childTagName] =in_array($childTagName, $options['alwaysArray']) || !$options['autoArray']? array($childProperties) : $childProperties;} elseif (is_array($tagsArray[$childTagName]) && array_keys($tagsArray[$childTagName])=== range(0, count($tagsArray[$childTagName]) - 1)) {//key already exists and is integer indexed array$tagsArray[$childTagName][] = $childProperties;} else {//key exists so convert to integer indexed array with previous value in position 0$tagsArray[$childTagName] = array($tagsArray[$childTagName], $childProperties);}}} //get text content of node$textContentArray = array();$plainText = trim((string)$xml);if ($plainText !== '') $textContentArray[$options['textContent']] = $plainText; //stick it all together$propertiesArray = !$options['autoText'] || $attributesArray || $tagsArray || ($plainText === '')? array_merge($attributesArray, $tagsArray, $textContentArray) : $plainText; //return node as arrayreturn array($xml->getName() => $propertiesArray);}
登录后复制

使用实例

$xmlNode = simplexml_load_file('example.xml');$arrayData = xmlToArray($xmlNode);echo json_encode($arrayData);
登录后复制

推荐学习:《PHP视频教程

以上就是php xml怎么转化成json的详细内容,更多请关注php中文网其它相关文章!

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}