中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用php數組轉xml

發布時間:2020-07-21 09:23:48 來源:億速云 閱讀:136 作者:Leah 欄目:編程語言

如何使用php數組轉xml?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

php數組轉xml的方法:1、不使用回調函數,代碼為【function outXmlFile($file, $xml_str)】;2、回調方法,生成不規則的xml,代碼為【$this->arrTo_Xml($value, $key)】。

php數組轉xml的方法:

方法一:原生的寫法

<?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;

方法二:寫死的方法,沒有使用回調函數

 /**
 * 把特定格式的數組轉化成XML
 *
 * @param $arr  array  數組格式如下
 * @param string $rootNodeName 最外層節點(根節點)
 * @return string
 */
function arrToXml($arr, $rootNodeName = 'index')
{
    $Dom = new DOMDocument('1.0', 'utf-8');
 
    // 根節點
    $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 == 'sitemapindex') {
            $lastmodNode = $Dom->createElement('lastmod', $value["lastmod"]);
        } else {
            $lastmodNode = $Dom->createElement('lastmod');
            $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('www.baidu.com/sitic.xml', $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>
 */

方法三: 回調方法,可以生成不規則的xml  (  方法調用,與方法二一樣 )

/**
 * @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 = 'index', $element = '', $Dom = '')
{
    $Dom = empty($Dom) ? new DOMDocument('1.0', 'utf-8') : $Dom;
 
    if ($element == '') {
        $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, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
 
    return $data;
}


關于如何使用php數組轉xml問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鲜城| 大悟县| 海宁市| 辉南县| 延吉市| 冕宁县| 茶陵县| 汤阴县| 巴彦淖尔市| 尼木县| 天峨县| 包头市| 黎平县| 廉江市| 民乐县| 余江县| 金川县| 本溪| 红桥区| 岱山县| 雷州市| 丹凤县| 怀柔区| 吉隆县| 贵定县| 简阳市| 武汉市| 连城县| 手游| 思南县| 普定县| 建湖县| 鸡西市| 日土县| 明溪县| 长子县| 平塘县| 昌邑市| 山东| 枣阳市| 金沙县|