Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiere ich ein PHP-Array in XML?

Wie konvertiere ich ein PHP-Array in XML?

coldplay.xixi
coldplay.xixiOriginal
2020-07-18 13:12:363800Durchsuche

So konvertieren Sie ein PHP-Array in XML: 1. Ohne Verwendung der Callback-Funktion lautet der Code [function outXmlFile($file, $xml_str)] 2. Callback-Methode, generieren Sie unregelmäßiges XML, der Code lautet [$ this ->arrTo_Xml($value, $key)].

Wie konvertiere ich ein PHP-Array in XML?

So konvertieren Sie ein PHP-Array in XML:

Methode 1: Natives Schreiben

<?php
/**
 * 简单原生的数组转为xml
 * @param $arr
 * @return string
 */
function arrayToXml($arr)
{
    $xml = "<root>";
    foreach ($arr as $key => $val) {
        if (is_array($val)) {
            $xml .= "<" . $key . ">" . arrayToXml($val) . "</" . $key . ">";
        } else {
            $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
        }
    }
    $xml .= "</root>";
    return $xml;
}
 
$arr = array();
$arr["url"] = array(
    1 => array(
        "loc" => "http://www.php.com/refessories/ind_10-gen_3/",
        "lastmod" => "2018/10/09"
    ),
    2 => array(
        "loc" => "http://www.php.com/refeessories/ind_12-gen_5/",
        "lastmod" => "2018/10/09"
    ),
    3 => array(
        "loc" => "http://www.php.com/refeessories/ind_15-gen_5/",
        "lastmod" => "2018/10/09"
    ),
);
 
$simple_arrtoxml = arrayToXml($arr);
 
var_dump($simple_arrtoxml);
exit;

Methode 2: Fest codierte Methode, ohne Rückruffunktion zu verwenden

 /**
 * 把特定格式的数组转化成XML
 *
 * @param $arr  array  数组格式如下
 * @param string $rootNodeName 最外层节点(根节点)
 * @return string
 */
function arrToXml($arr, $rootNodeName = &#39;index&#39;)
{
    $Dom = new DOMDocument(&#39;1.0&#39;, &#39;utf-8&#39;);
 
    // 根节点
    $root_node = $Dom->createElement($rootNodeName);
    $Dom->appendChild($root_node);
 
    //第一个节点
    $firstNodeName = key($arr);
    //循环节点
    foreach ($arr[$firstNodeName] as $value) {
        $firstNode = $Dom->createElement($firstNodeName);
        $root_node->appendChild($firstNode);
 
        $locNode = $Dom->createElement("loc", $value["loc"]);
        $firstNode->appendChild($locNode);
 
        if ($rootNodeName == &#39;sitemapindex&#39;) {
            $lastmodNode = $Dom->createElement(&#39;lastmod&#39;, $value["lastmod"]);
        } else {
            $lastmodNode = $Dom->createElement(&#39;lastmod&#39;);
            $cdata = $Dom->createCDATASection($value["lastmod"]);// 生成日期特殊形式:<![CDATA[2017/09/29]]>
            $lastmodNode->appendChild($cdata);
        }
        $firstNode->appendChild($lastmodNode);
    }
    $Dom->formatOutput = true;//将特殊形式输出出来
    $result = $Dom->saveXML();
    return $result;
}
 
/**
 * 输出xml数据到xml文件中
 *
 * @param $file  string 文件名
 * @param $xml_str
 * @return bool|int
 */
function outXmlFile($file, $xml_str)
{
    echo "生成 ", $file, " 成功!", PHP_EOL;
    return file_put_contents($file, $xml_str);
}
 
/******************** 写死的方法,没有使用回调函数 **************************/
$result = array();
$result["url"] = array(
    1 => array(
        "loc" => "http://www.php.com/refessories/ind_10-gen_3/",
        "lastmod" => "2018/10/09"
    ),
    2 => array(
        "loc" => "http://www.php.com/refeessories/ind_12-gen_5/",
        "lastmod" => "2018/10/09"
    ),
    3 => array(
        "loc" => "http://www.php.com/refeessories/ind_15-gen_5/",
        "lastmod" => "2018/10/09"
    ),
);
 
$res = arrToXml($result, "ulrset");
// outXmlFile(&#39;www.baidu.com/sitic.xml&#39;, $res);  // 自己选择要保存的位置
var_dump($res);
exit;
 
// ==========================================================
// 结果:
/**
 * <?xml version="1.0" encoding="utf-8"?>
 * <ulrset>
 * <url>
 * <loc>http://www.php.com/refessories/ind_10-gen_3/</loc>
 * <lastmod><![CDATA[2018/10/09]]></lastmod>
 * </url>
 * <url>
 * <loc>http://www.php.com/refeessories/ind_12-gen_5/</loc>
 * <lastmod><![CDATA[2018/10/09]]></lastmod>
 * </url>
 * <url>
 * <loc>http://www.php.com/refeessories/ind_15-gen_5/</loc>
 * <lastmod><![CDATA[2018/10/09]]></lastmod>
 * </url>
 * </ulrset>
 */

Methode 3: Rückrufmethode, die unregelmäßige XML-Dateien generieren kann (Methodenaufruf, Das Gleiche als Methode zwei)

/**
 * @param array $arr 数组
 * @param int $dom Document
 * @param int $item
 * @return string
 */
function arr_to_xml($arr, $dom = 0, $item = 0)
{
    if (!$dom) {
        $dom = new DOMDocument("1.0");
    }
    if (!$item) {
        $item = $dom->createElement("root");// 根节点
        $dom->appendChild($item);
    }
    foreach ($arr as $key => $val) {
        $itemx = $dom->createElement(is_string($key) ? $key : "item");
        $item->appendChild($itemx);
        if (!is_array($val)) {
            $text = $dom->createTextNode($val);// 创建一个文本节点
            $itemx->appendChild($text);
 
        } else {
            arr_to_xml($val, $dom, $itemx); // 自己调用自己
        }
    }
    return $dom->saveXML();
}
 
 
//  或者下面的这种回调方法
 
/**
 * 把特定格式的数组转化成XML
 *
 * @param $arr
 * @param string $nodeName xml子节点
 * @param string $element
 * @param string $Dom
 * @return string
 */
function arrTo_Xml($arr, $nodeName = &#39;index&#39;, $element = &#39;&#39;, $Dom = &#39;&#39;)
{
    $Dom = empty($Dom) ? new DOMDocument(&#39;1.0&#39;, &#39;utf-8&#39;) : $Dom;
 
    if ($element == &#39;&#39;) {
        $data = $Dom->createElement($nodeName);
        $Dom->appendChild($data);
    } else {
        $data = $element;
    }
    foreach ($arr as $key => $value) {
        if (is_array($value)) {
            if (!is_numeric($key)) {
                $element = $Dom->createElement($key);
                $data->appendChild($element);
            }
            $this->arrTo_Xml($value, $key, $element, $Dom);// 自己调用自己
        } else {
            if ($key == "lastmod") {
                $element = $Dom->createElement($key);
                $cdata = $Dom->createCDATASection($value); // 生成日期特殊形式:<![CDATA[2017/09/29]]>
                $element->appendChild($cdata);
            } else {
                $element = $Dom->createElement($key, $value);// 用createElement创建出来的都是一行(例如:<username>xingmimng</username>
            }
 
            $data->appendChild($element);// 创建的一行放在哪个 xml的节点下
        }
    }
 
    $Dom->formatOutput = true;// 输出特殊形式
    $result = $Dom->saveXML();
    unset($Dom);// 释放资源
    return $result;
}
 
// 数据结构    
$result = array();
$result["url"] = array(
    1 => array(
        "loc" => "http://www.php.com/refessories/ind_10-gen_3/",
        "lastmod" => "2018/10/09"
    ),
    2 => array(
        "loc" => "http://www.php.com/refeessories/ind_12-gen_5/",
        "lastmod" => "2018/10/09"
    ),
    3 => array(
        "loc" => "http://www.php.com/refeessories/ind_15-gen_5/",
        "lastmod" => "2018/10/09"
    ),
);
 
 
/************************************************************************************
 * 附加:  xml转为array
 *************************************************************************************/
 
/**
 * 将xml转为array
 * @param string $xml
 * return array
 */
function xml_to_array($xml)
{
    if (!$xml) {
        return false;
    }
 
    //将XML转为array
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
 
    $data = json_decode(json_encode(simplexml_load_string($xml, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA)), true);
 
    return $data;
}

Verwandte Lernempfehlungen: PHP-Programmierung vom Einstieg bis zur Beherrschung

Das obige ist der detaillierte Inhalt vonWie konvertiere ich ein PHP-Array in XML?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn