1. 云栖社区>
  2. PHP教程>
  3. 正文

php xml 转换成 数组

作者:用户 来源:互联网 时间:2017-12-01 20:16:50

xmlphp数组换成

php xml 转换成 数组 - 摘要: 本文讲的是php xml 转换成 数组,     /*** * 将xml转为数组 * @param string $xml xml字符串 * @param string $version xml版本 * @param string $charset xml编码*/function

 


 


/**
*
* 将xml转为数组
* @param string $xml xml字符串
* @param string $version xml版本
* @param string $charset xml编码
*/
function xmlToArray($xml, $version="1.0", $charset="utf-8"){
$doc = new DOMDocument ("1.0", $charset);
$doc->loadXML ($xml);
$result = domNodeToArray($doc);
if(isset($result['#document'])){$result = $result['#document'];
}
return $result;
}
/**
*
* 将domNode转为数组
* @param DOMNode $oDomNode
*/
function domNodeToArray(DOMNode $oDomNode = null) {
// return empty array if dom is blank
if (! $oDomNode->hasChildNodes ()) {$mResult = $oDomNode->nodeValue;
} else {$mResult = array ();foreach ( $oDomNode->childNodes as $oChildNode ) {// how many of these child nodes do we have?// this will give us a clue as to what the result structure should be$oChildNodeList = $oDomNode->getElementsByTagName ( $oChildNode->nodeName );$iChildCount = 0;// there are x number of childs in this node that have the same tag name// however, we are only interested in the # of siblings with the same tag nameforeach ( $oChildNodeList as $oNode ) {
if ($oNode->parentNode->isSameNode ( $oChildNode->parentNode )) {
$iChildCount ++;
}}$mValue = domNodeToArray ( $oChildNode );$sKey = ($oChildNode->nodeName {0} == '#') ? 0 : $oChildNode->nodeName;$mValue = is_array ( $mValue ) ? $mValue [$oChildNode->nodeName] : $mValue;// how many of thse child nodes do we have?if ($iChildCount > 1) { // more than 1 child - make numeric array
$mResult [$sKey] [] = $mValue;} else {
$mResult [$sKey] = $mValue;}}// if the child is bar, the result will be array(bar)// make the result just 'bar'if (count ( $mResult ) == 1 && isset ( $mResult [0] ) && ! is_array ( $mResult [0] )) {$mResult = $mResult [0];}
}
// get our attributes if we have any
$arAttributes = array ();
if ($oDomNode->hasAttributes ()) {foreach ( $oDomNode->attributes as $sAttrName => $oAttrNode ) {// retain namespace prefixes$arAttributes ["@{$oAttrNode->nodeName}"] = $oAttrNode->nodeValue;}
}
// check for namespace attribute - Namespaces will not show up in the attributes list
if ($oDomNode instanceof DOMElement && $oDomNode->getAttribute ( 'xmlns' )) {$arAttributes ["@xmlns"] = $oDomNode->getAttribute ( 'xmlns' );
}
if (count ( $arAttributes )) {if (! is_array ( $mResult )) {$mResult = (trim ( $mResult )) ? array ($mResult ) : array ();}$mResult = array_merge ( $mResult, $arAttributes );
}
$arResult = array ($oDomNode->nodeName => $mResult );
return $arResult;
}

 


示例:


 


<?xml version="1.0"?>




123456


[email protected]




 


转换成数组后的形式是:


 


 


Array


(


    [root] => Array


        (


            [User] => Array


                (


                    [UserGUID] => 123456


                    [NickName] => [email protected]


                )


 


        )


 


)


 


http://huangqiqing123.iteye.com/blog/1738839


 


 


 

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索xml , php , 数组 换成 ,以便于您获取更多的相关知识。