php 生成xml文件
<?php
class Xml
{
/*
* $aData 要格式化的数组
* $path xml信息要写入的文件路径
* $version xml文件的版本信息
* $encoding xml文件信息的编码形式
* 返回 : false 数组格式不正确
true 成功
*/
private $_strEcode;
public function array2XmlFile ( $aData , $path , $version='1.0' , $encoding = 'GBK')
{
$this->_strEcode = $encoding;
//判断数组格式是否正确
$bFlag = $this ->checkArray($aData);
if(!$bFlag)
{
return false;
}
$xmlDoc = @new DOMDocument( $version , $encoding );
$xmlDoc -> formatOutput=true;
foreach($aData as $kData => $vData)
{
//声明根节点 upload
$objRoot = $xmlDoc->createElement ($kData) ;
$objRoot = $xmlDoc->appendChild($objRoot);
//添加根节点属性 icp
if(is_array($vData))
{
$xmlDoc = $this-> formatXml($vData , $kData , $xmlDoc , $objRoot);
}
}
if($xmlDoc-> save($path))
{ //保存路径
return true;
}
else
{
return false ;
}
}
/*
*
*/
public function array2Xmlstring( $aData , $version='1.0' , $encoding = 'GBK')
{
$this->_strEcode = $encoding;
//判断数组格式是否正确
$bFlag = $this ->checkArray($aData);
if(!$bFlag)
{
return false;
}
$xmlDoc = @new DOMDocument( $version , $encoding );
$xmlDoc -> formatOutput=true;
foreach($aData as $kData => $vData)
{
//声明根节点 upload
$objRoot = $xmlDoc->createElement ($kData) ;
$objRoot = $xmlDoc->appendChild($objRoot);
//添加根节点属性 icp
if(is_array($vData))
{
$xmlDoc = $this-> formatXml($vData , $kData , $xmlDoc , $objRoot);
}
}
return $xmlDoc->saveXML();
}
private function checkArray($aData)
{
$bIntFlag = false ;
$bStrFlag = false ;
$bResult = true;
foreach($aData as $k => $v)
{
$strKType = gettype($k);
if(strcmp($strKType , 'integer') == 0)
{
$bIntFlag = true;
}
elseif(strcmp($k , "Attribute") != 0)
{
$bStrFlag = true;
}
}
if( $bIntFlag and $bStrFlag)
{
return false;
}
else
{
foreach($aData as $kk => $vv)
{
if(is_array($vv))
{
$bResult = $this -> checkArray($vv);
if(!$bResult)
{
break;
}
}
}
return $bResult ;
}
}
private function formatXml($aData , $kFront , $objDoc , $objFrnDoc , $objStepDoc= null)
{
$nCount = 0;
foreach( $aData as $kData => $vData)
{
if(is_string($kData))
{
$kData = trim( $kData );
}
if(strcmp ( $kData , "Attribute") == 0)
{
foreach($vData as $kAttr => $vAttr)
{
$strAttr = $objDoc->createAttribute($kAttr); //创建节点属性对象实体
$objAttr = $objFrnDoc->appendChild($strAttr); //把属性添加到节点info中
$objAttr -> appendChild($objDoc->createTextNode($vAttr));
}
}
else
{
if(!is_int(($kData)))
{
$objCurrDoc = $objDoc -> createElement ($kData);
$objCurrDoc = $objFrnDoc->appendChild($objCurrDoc);
}
else
{
if($nCount == 0)
{
$objCurrDoc = $objFrnDoc;
$nCount ++ ;
}
else
{
$objCurrDoc = $objDoc -> createElement ($kFront);
$objCurrDoc = $objStepDoc->appendChild($objCurrDoc);
}
}
if(!is_array($vData) )
{
if(strcasecmp($this->_strEcode , 'utf-8') == 0)
{
$objCurrDoc->appendChild($objDoc->createTextNode($vData));
}
else
{
//$objCurrDoc->appendChild($objDoc->createTextNode(mb_convert_encoding ($vData ,"UTF-8", "GB2312")));
$objCurrDoc->appendChild($objDoc->createTextNode(mb_convert_encoding ($vData ,"UTF-8", "GBK")));
}
}
else
{
$objDoc = $this ->formatXml($vData , $kData , $objDoc , $objCurrDoc , $objFrnDoc);
}
}
}
return $objDoc;
}
/*
* $objXml xml格式对象
* 返回 : 对应格式数组
*/
public function XmlString2Arr($xml)
{
if(is_string($xml))
{
$xml = simplexml_load_string($xml);
}
$aXml = (array) $xml;
foreach($aXml as $k => $v)
{
if(is_object($v) || is_array($v))
{
$aXml[$k] = $this -> XmlString2Arr($v);
}
}
return $aXml;
}
}
php 生成xml文件的更多相关文章
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- Java生成XML文件
我们在数据库中的数据可以将其提取出来生成XML文件,方便传输.例如数据库中有Admin这张表: 我们写一个java类表示admin数据: package xmlDom.vo; import java. ...
- Android 使用xml序列化器生成xml文件
在<Android 生成xml文件>一文中使用流的形式写入xml格式文件,但是存在一定的问题,那就是在短信内容中不能出现<>之类的括号,本文使用xml序列化器来解决 xml序列 ...
- C# 生成xml文件
本篇文章旨在.net环境下生成xml文件,以控制台应用程序为例进行说明. 1.在vs中新建控制台应用程序CreateXml 2.CreateXmlFile:主要生成xml的函数 public void ...
- 视频播放实时记录日志并生成XML文件
需求描述: 在JWPlayer视频播放过程中,要求实时记录视频观看者播放.暂停的时间,并记录从暂停到下一次播放时所经过的时间.将所有记录保存为XML文件,以方便数据库的后续使用. 实现过程: 尝试1: ...
- 使用XML序列化器生成XML文件和利用pull解析XML文件
首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...
- LINQ to XML 从逗号分隔值 (CSV) 文件生成 XML 文件
参考:http://msdn.microsoft.com/zh-cn/library/bb387090.aspx 本示例演示如何使用 语言集成查询 (LINQ) 和 LINQ to XML 从逗号分隔 ...
- 生成XML文件,通过实体生成XML文件
实体 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xm ...
- PHP中的生成XML文件的4种方法(转)
<?xml version="1.0" encoding="utf-8"?> <article> <item> <ti ...
- 使用XMl序列化器生成xml文件
生成XML文件 创建几个虚拟的短信对象,存在list中 备份数据通常都是备份至sd卡 使用StringBuffer拼接字符串 把整个xml文件所有节点append到sb对象里 sb.append(&q ...
随机推荐
- Python GUI界面编程
常用GUI框架 wxPython 安装wxPython pip install -U wxPython C:\Users> pip install -U wxPython Collecting ...
- Java 获取当前系统的时间
获取当前系统的时间,每隔一秒,打印一次. import java.util.Date; public class TestDate { public static void main(String[] ...
- requests禁止重定向
response = requests.get( 'http://weixin.sogou.com/weixin?query=%E9%A3%8E%E6%99%AF&type=2&pag ...
- 在IDEA中编写Spark的WordCount程序
1:spark shell仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在IDE中编制程序,然后打成jar包,然后提交到集群,最常用的是创建一个Maven项目,利用Maven来管理jar包 ...
- [转] webpack之plugin内部运行机制
简介 webpack作为当前最为流行的模块打包工具,几乎所有的主流前端开发框架(React.Vue等)都会将其作为默认的模块加载和打包工具.通过简单的配置项,使用各种相关的loader和plugin, ...
- [转] 那些在使用webpack时踩过的坑
用webpack的过程,就是一个不断入坑和出坑的过程.回望来时路,一路都是坑啊!现把曾经趟过的那些坑整理出来,各位看官有福了~ 文章末尾有我用到的依赖的版本信息,若你发现某个问题与我在本文中的描述不一 ...
- javaScript事件(八)事件类型之变动事件
DOM2级的变动(mutation)事件能在DOM中某一部分发送变化时给出提示.变动事件为XML或HTML DOM设计的,并不特定于某种语言.DOM2级定义了如下变动事件. DOMSubtreeMod ...
- HashMap、HashTable与ConcurrentHashMap区别
线程不安全的HashMap 在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap.例如,执行如下代码会引起死循环. fin ...
- 【转】android:paddingLeft与android:layout_marginLeft的区别
http://www.blogjava.net/anchor110/articles/342206.html 当按钮分别设置以上两个属性时,得到的效果是不一样的. android:paddingLef ...
- mongodb中投票节点作用
投票节点 并不含有 复制集中的数据集副本,且也 无法 升职为主节点.投票节点的存在是为了使复制集中的节点数量为奇数,这样保证在进行投票的时候不会出现票数相同的情况.如果添加了一个节点后,总节点数为偶数 ...