溫馨提示×

溫馨提示×

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

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

如何使用php數(shù)組轉(zhuǎn)xml

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

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

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

php數(shù)組轉(zhuǎn)xml的方法:

方法一:原生的寫法

<?php
/**
 * 簡單原生的數(shù)組轉(zhuǎn)為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;

方法二:寫死的方法,沒有使用回調(diào)函數(shù)

 /**
 * 把特定格式的數(shù)組轉(zhuǎn)化成XML
 *
 * @param $arr  array  數(shù)組格式如下
 * @param string $rootNodeName 最外層節(jié)點(根節(jié)點)
 * @return string
 */
function arrToXml($arr, $rootNodeName = 'index')
{
    $Dom = new DOMDocument('1.0', 'utf-8');
 
    // 根節(jié)點
    $root_node = $Dom->createElement($rootNodeName);
    $Dom->appendChild($root_node);
 
    //第一個節(jié)點
    $firstNodeName = key($arr);
    //循環(huán)節(jié)點
    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數(shù)據(jù)到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);
}
 
/******************** 寫死的方法,沒有使用回調(diào)函數(shù) **************************/
$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;
 
// ==========================================================
// 結(jié)果:
/**
 * <?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>
 */

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

/**
 * @param array $arr 數(shù)組
 * @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");// 根節(jié)點
        $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);// 創(chuàng)建一個文本節(jié)點
            $itemx->appendChild($text);
 
        } else {
            arr_to_xml($val, $dom, $itemx); // 自己調(diào)用自己
        }
    }
    return $dom->saveXML();
}
 
 
//  或者下面的這種回調(diào)方法
 
/**
 * 把特定格式的數(shù)組轉(zhuǎn)化成XML
 *
 * @param $arr
 * @param string $nodeName xml子節(jié)點
 * @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);// 自己調(diào)用自己
        } 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創(chuàng)建出來的都是一行(例如:<username>xingmimng</username>
            }
 
            $data->appendChild($element);// 創(chuàng)建的一行放在哪個 xml的節(jié)點下
        }
    }
 
    $Dom->formatOutput = true;// 輸出特殊形式
    $result = $Dom->saveXML();
    unset($Dom);// 釋放資源
    return $result;
}
 
// 數(shù)據(jù)結(jié)構(gòu)    
$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轉(zhuǎn)為array
 *************************************************************************************/
 
/**
 * 將xml轉(zhuǎn)為array
 * @param string $xml
 * return array
 */
function xml_to_array($xml)
{
    if (!$xml) {
        return false;
    }
 
    //將XML轉(zhuǎn)為array
    //禁止引用外部xml實體
    libxml_disable_entity_loader(true);
 
    $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
 
    return $data;
}


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

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI