3

私は、配列/jsonからxmlを作成/解析できるXMLライブラリに取り組んでいます。xml_parser (および Google ヘルプ :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;
}

で呼び出されるこの関数recurse2xml($array);は、配列ツリーを xml ツリー (文字列形式) に展開します。

于 2013-04-18T14:51:32.047 に答える
2

Array2XMLを試してみてください。問題なく機能しました。CDATAパーツなどを含む

于 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 に答える