3

我正在开发一个 XML 库,它可以从数组/jsons 创建/解析 xml。我设法用 xml_parser (和谷歌帮助:p)编写了解析器,因为 SimpleXML 对我正在做的事情还不够好。

我设法创建了一个看起来像这样的数组:

Array 
(
[flow] => Array
    (
        [math] => Array
            (
                [apply] => Array
                    (
                        [lt] => Array
                            (
                            )

                        [apply] => Array
                            (
                                [divide] => Array
                                    (
                                    )

                                [apply] => Array
                                    (
                                        [minus] => Array
                                            (
                                            )
                                    )
                            )

                        [otherStuff] => 0
                    )

            )

        [true] => Array
            (


            )

        [true_attr] => Array
            (
                [xsi:type] => SomeStuff
                [id] => 2
            )

    )

[flow_attr] => Array
    (
        [id] => 0
        [xmlns:xsi] => http://www.w3.org/2001/XMLSchema-instance
    )
)

如您所见,它应该看起来像这样(不是最好的例子:p):

<flow id="0">
 <math>
 <lalaa/>
  <appyl>
 </apply>
  </math>
</flow>

请注意,空数组应以 /> 结尾,例如,等等

如您所见,我将它自己的节点分隔为包含节点属性的 node_attr。像 flow_attr、true_attr。

任何人都知道如何将此数组转换回xml?我只是迷路了,不知道该怎么办。

谢谢您的帮助!

4

3 回答 3

3
function recurse2xml ($array, &$string = "") {
    foreach ($array as $key => $subArray) {
        if (substr($key, -5) == "_attr")
            continue;
        $attrs = "";
        if (isset($array["$key_attr"]))
            foreach ($array["$key_attr"] as $attr => $value)
                $attrs .= " $attr='".str_replace($value, "'", "\\'")."'";
        if (empty($subArray)) {
            $string .= "<$key$attrs />";
        } else {
            $string .= "<$key$attrs>";
            if (is_scalar($subArray))
                $string .= $subArray;
            else
                recurse2xml($subArray, $string);
            $string .= "</$key>";
        }
    }
    return $string;
}

此函数调用 withrecurse2xml($array);将您的数组树扩展为 xml 树(字符串形式)。

于 2013-04-18T14:51:32.047 回答
2

试试Array2XML,对我来说完美无缺。包括CDATA Parts等。

于 2013-04-18T14:45:15.977 回答
0
function recursiveArrayToXml($array, &$return=""){
    foreach ($array as $key => $subarray){
        if(empty($key)) {continue;}
        $key = preg_replace('/[^\da-z]/i', '', $key);
        if(preg_match('/[0-9]/i',$key[0])){
            $key = 'x'.$key;
        }
        $return .= "<".$key.">";
        if(!is_array($subarray)){
            $return .= htmlentities($subarray);
        }else{
            recursiveArrayToXml($subarray, $return);
        }
        $return .= "</".$key.">\n";
    }
    return $return;
}

此功能将类似于上面发布的修复元素名称和元素值中的问题。由 recursiveArrayToXml($myArray); 调用

于 2016-09-13T08:18:05.807 回答