";
foreach ($arr as $key => $val) {
if (is_array($val)) {
$xml .= "<" . $key . ">" . arrayToXml($val) . "" . $key . ">";
} else {
$xml .= "<" . $key . ">" . $val . "" . $key . ">";
}
}
$xml .= "";
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"]);// 生成日期特殊形式:
$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;
// ==========================================================
// 结果:
/**
*
*
*
* http://www.php.com/refessories/ind_10-gen_3/
*
*
*
* http://www.php.com/refeessories/ind_12-gen_5/
*
*
*
* http://www.php.com/refeessories/ind_15-gen_5/
*
*
*
*/
// ==========================================================
/************************************************************************************
* 方法三: 回调方法,可以生成不规则的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); // 生成日期特殊形式:
$element->appendChild($cdata);
} else {
$element = $Dom->createElement($key, $value);// 用createElement创建出来的都是一行(例如:xingmimng
}
$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;
}