android关于xml文件xml反序列化化的问题

&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
复杂 XML 的序列化反序列化
摘要:来自:http://q.cnblogs.com/q/65254/#a_144481很不错的一道实例,事先声明,没有http://q.cnblogs.com/u/583331/的提示,这种多层的复杂xml反序列化,我真没做出来。&已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象。1&?xmlversion=&1.0&encoding=&utf-8&?&2&config&3&
来自:http://q.cnblogs.com/q/65254/#a_144481
很不错的一道实例,事先声明,没有http://q.cnblogs.com/u/583331/的提示, 这种多层的复杂xml反序列化,我真没做出来。
已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象。
1 &?xml version=&1.0& encoding=&utf-8& ?& 2 &config& 3
&rule name=&namea&& 5
&params& 6
&item name=&p& type=&get& pattern=&(ios|android|)& /& 7
&item name=&cid& type=&get& pattern=&(ios|android|)& /& 8
&item name=&type& type=&get& pattern=&(ios|android|)& /& 9
&item name=&sort& type=&get& pattern=&(ios|android|)& /&10
&item name=&action& type=&post& pattern=&(ios|android|)& /&11
&item name=&userAgent& type=&header& pattern=&(ios|android|)& /&12
&/params&13
&rule name=&nameb&&16
&params&17
&item name=&p& type=&get& pattern=&(ios|android|)& /&18
&item name=&cid& type=&get& pattern=&(ios|android|)& /&19
&item name=&type& type=&get& pattern=&(ios|android|)& /&20
&item name=&sort& type=&get& pattern=&(ios|android|)& /&21
&item name=&action& type=&post& pattern=&(ios|android|)& /&22
&item name=&userAgent& type=&header& pattern=&(ios|android|)& /&23
&/params&24
&rule name=&namec&&27
&params&28
&item name=&p& type=&get& pattern=&(ios|android|)& /&29
&item name=&cid& type=&get& pattern=&(ios|android|)& /&30
&item name=&type& type=&get& pattern=&(ios|android|)& /&31
&item name=&sort& type=&get& pattern=&(ios|android|)& /&32
&item name=&action& type=&post& pattern=&(ios|android|)& /&33
&item name=&userAgent& type=&header& pattern=&(ios|android|)& /&34
&/params&35
&rule name=&named&&38
&params&39
&item name=&p& type=&get& pattern=&(ios|android|)& /&40
&item name=&cid& type=&get& pattern=&(ios|android|)& /&41
&item name=&type& type=&get& pattern=&(ios|android|)& /&42
&item name=&sort& type=&get& pattern=&(ios|android|)& /&43
&item name=&action& type=&post& pattern=&(ios|android|)& /&44
&item name=&userAgent& type=&header& pattern=&(ios|android|)& /&45
&/params&46
&/rules&48 &/config&
Default.XML
&C#示例代码using Susing System.Collections.Gusing System.Lusing System.Tusing System.Xml.Snamespace 多层级反序列{
[XmlType(TypeName = &config&)]
public class XmlConfig
[XmlArray(&rules&)]
public List&rule& rules {
[XmlType(TypeName = &rule&)]
public class rule
[XmlAttribute]
public string name {
[XmlArray(&params&)]
public List&paramsItem& @params {
[XmlType(TypeName = &item&)]
public class paramsItem
[XmlAttribute]
public string name {
[XmlAttribute]
public string type {
[XmlAttribute]
public string pattern {
class Program
static void Main(string[] args)
XmlConfig xml1 = DeserializeFromXml&XmlConfig&(&default.xml&);
XmlConfig xml = new XmlConfig();
SerializeToXml&XmlConfig&(&default.xml&, xml);
XmlConfig xml1 = DeserializeFromXml&XmlConfig&(&default.xml&);
/// &summary&
/// XML序列化某一类型到指定的文件
/// &/summary&
/// &param name=&filePath&&&/param&
/// &param name=&obj&&&/param&
/// &param name=&type&&&/param&
public static void SerializeToXml&T&(string filePath, T obj)
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath))
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
xs.Serialize(writer, obj);
catch (Exception ex)
/// &summary&
/// 从某一XML文件反序列化到某一类型
/// &/summary&
/// &param name=&filePath&&待反序列化的XML文件名称&/param&
/// &param name=&type&&反序列化出的&/param&
/// &returns&&/returns&
public static T DeserializeFromXml&T&(string filePath)
if (!System.IO.File.Exists(filePath))
throw new ArgumentNullException(filePath + & not Exists&);
using (System.IO.StreamReader reader = new System.IO.StreamReader(filePath))
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
T ret = (T)xs.Deserialize(reader);
catch (Exception ex)
return default(T);
}}示例代码&
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
新用户大礼包!
现在注册,免费体验40+云产品,及域名优惠!
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
复杂 XML 的序列化反序列化相关信息,包括
的信息,所有复杂 XML 的序列化反序列化相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点,C#对...
我的图书馆
一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点,C#对...
public class XmlHelper&&&&{&&&&&&&&public XmlHelper()&&&&&&&&{&&&&&&&&}&&&&&&&&&public enum XmlType&&&&&&&&{&&&&&&&&&&&&File,&&&&&&&&&&&&String&&&&&&&&};&&&&&&&&&/// &summary&&&&&&&&&/// 创建XML文档&&&&&&&&/// &/summary&&&&&&&&&/// &param name="name"&根节点名称&/param&&&&&&&&&/// &param name="type"&根节点的一个属性值&/param&&&&&&&&&/// &returns&&/returns&&&&&&&&&/// .net中调用方法:写入文件中,则:&&&&&&&&///&&&&&&&&& document = XmlOperate.CreateXmlDocument("sex", "sexy");&&&&&&&&///&&&&&&&&& document.Save("c:/bookstore.xml");&&&&&&&& &&&&&&&&public static XmlDocument CreateXmlDocument( string name, string type )&&&&&&&&{&&&&&&&&&&&&XmlDocument doc = null;&&&&&&&&&&&&XmlElement rootEle = null;&&&&&&&&&&&&try&&&&&&&&&&&&{&&&&&&&&&&&&&&&&doc = new XmlDocument();&&&&&&&&&&&&&&&&doc.LoadXml( "&" + name + "/&" );&&&&&&&&&&&&&&&&rootEle = doc.DocumentE&&&&&&&&&&&&&&&&rootEle.SetAttribute( "type", type );&&&&&&&&&&&&}&&&&&&&&&&&&catch (Exception er)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&throw &&&&&&&&&&&&}&&&&&&&&&&&&return &&&&&&&&}&&&&&&&&&&/// &summary&&&&&&&&&/// 读取数据&&&&&&&&/// &/summary&&&&&&&&&/// &param name="path"&路径&/param&&&&&&&&&/// &param name="node"&节点&/param&&&&&&&&&/// &param name="attribute"&属性名,非空时返回该属性值,否则返回串联值&/param&&&&&&&&&/// &returns&string&/returns&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public static string Read( string path, string node, string attribute )&&&&&&&&{&&&&&&&&&&&&string value = "";&&&&&&&&&&&&try&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlDocument doc = new XmlDocument();&&&&&&&&&&&&&&&&doc.Load( path );&&&&&&&&&&&&&&&&XmlNode xn = doc.SelectSingleNode( node );&&&&&&&&&&&&&&&&value = (attribute.Equals( "" ) ? xn.InnerText : xn.Attributes[attribute].Value);&&&&&&&&&&&&}&&&&&&&&&&&&catch { }&&&&&&&&&&&&return &&&&&&&&}&&&&&&&&&/// &summary&&&&&&&&&/// 插入数据&&&&&&&&/// &/summary&&&&&&&&&/// &param name="path"&路径&/param&&&&&&&&&/// &param name="node"&节点&/param&&&&&&&&&/// &param name="element"&元素名,非空时插入新元素,否则在该元素中插入属性&/param&&&&&&&&&/// &param name="attribute"&属性名,非空时插入该元素属性值,否则插入元素值&/param&&&&&&&&&/// &param name="value"&值&/param&&&&&&&&&/// &returns&&/returns&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public static void Insert( string path, string node, string element, string attribute, string value )&&&&&&&&{&&&&&&&&&&&&try&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlDocument doc = new XmlDocument();&&&&&&&&&&&&&&&&doc.Load( path );&&&&&&&&&&&&&&&&XmlNode xn = doc.SelectSingleNode( node );&&&&&&&&&&&&&&&&if (element.Equals( "" ))&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&if (!attribute.Equals( "" ))&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&XmlElement xe = (XmlElement)&&&&&&&&&&&&&&&&&&&&&&&&xe.SetAttribute( attribute, value );&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&XmlElement xe = doc.CreateElement( element );&&&&&&&&&&&&&&&&&&&&if (attribute.Equals( "" ))&&&&&&&&&&&&&&&&&&&&&&&&xe.InnerText =&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&&&&xe.SetAttribute( attribute, value );&&&&&&&&&&&&&&&&&&&&xn.AppendChild( xe );&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&doc.Save( path );&&&&&&&&&&&&}&&&&&&&&&&&&catch { }&&&&&&&&}&&&&&&&&&/// &summary&&&&&&&&&/// 修改数据&&&&&&&&/// &/summary&&&&&&&&&/// &param name="path"&路径&/param&&&&&&&&&/// &param name="node"&节点&/param&&&&&&&&&/// &param name="attribute"&属性名,非空时修改该节点属性值,否则修改节点值&/param&&&&&&&&&/// &param name="value"&值&/param&&&&&&&&&/// &returns&&/returns&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public static void Update( string path, string node, string attribute, string value )&&&&&&&&{&&&&&&&&&&&&try&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlDocument doc = new XmlDocument();&&&&&&&&&&&&&&&&doc.Load( path );&&&&&&&&&&&&&&&&XmlNode xn = doc.SelectSingleNode( node );&&&&&&&&&&&&&&&&XmlElement xe = (XmlElement)&&&&&&&&&&&&&&&&if (attribute.Equals( "" ))&&&&&&&&&&&&&&&&&&&&xe.InnerText =&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&xe.SetAttribute( attribute, value );&&&&&&&&&&&&&&&&doc.Save( path );&&&&&&&&&&&&}&&&&&&&&&&&&catch { }&&&&&&&&}&&&&&&&&&/// &summary&&&&&&&&&/// 删除数据&&&&&&&&/// &/summary&&&&&&&&&/// &param name="path"&路径&/param&&&&&&&&&/// &param name="node"&节点&/param&&&&&&&&&/// &param name="attribute"&属性名,非空时删除该节点属性值,否则删除节点值&/param&&&&&&&&&/// &param name="value"&值&/param&&&&&&&&&/// &returns&&/returns&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public static void Delete( string path, string node, string attribute )&&&&&&&&{&&&&&&&&&&&&try&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlDocument doc = new XmlDocument();&&&&&&&&&&&&&&&&doc.Load( path );&&&&&&&&&&&&&&&&XmlNode xn = doc.SelectSingleNode( node );&&&&&&&&&&&&&&&&XmlElement xe = (XmlElement)&&&&&&&&&&&&&&&&if (attribute.Equals( "" ))&&&&&&&&&&&&&&&&&&&&xn.ParentNode.RemoveChild( xn );&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&xe.RemoveAttribute( attribute );&&&&&&&&&&&&&&&&doc.Save( path );&&&&&&&&&&&&}&&&&&&&&&&&&catch { }&&&&&&&&}&&&&&&&&&#region 读取XML资源到DataSet中&&&&&&&&/// &summary&&&&&&&&&/// 读取XML资源到DataSet中&&&&&&&&/// &/summary&&&&&&&&&/// &param name="source"&XML资源,文件为路径,否则为XML字符串&/param&&&&&&&&&/// &param name="xmlType"&XML资源类型&/param&&&&&&&&&/// &returns&DataSet&/returns&&&&&&&&&public static DataSet GetDataSet( string source, XmlType xmlType )&&&&&&&&{&&&&&&&&&&&&DataSet ds = new DataSet();&&&&&&&&&&&&if (xmlType == XmlType.File)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&ds.ReadXml( source );&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlDocument xd = new XmlDocument();&&&&&&&&&&&&&&&&xd.LoadXml( source );&&&&&&&&&&&&&&&&XmlNodeReader xnr = new XmlNodeReader( xd );&&&&&&&&&&&&&&&&ds.ReadXml( xnr );&&&&&&&&&&&&}&&&&&&&&&&&&return &&&&&&&&}&&&&&&&&&#endregion&&&&&&&&&#region 操作xml文件中指定节点的数据&&&&&&&&/// &summary&&&&&&&&&/// 获得xml文件中指定节点的节点数据&&&&&&&&/// &/summary&&&&&&&&&/// &param name="TableName"&&/param&&&&&&&&&/// &returns&&/returns&&&&&&&&&public static string GetNodeInfoByNodeName( string path, string nodeName )&&&&&&&&{&&&&&&&&&&&&string XmlString = "";&&&&&&&&&&&&XmlDocument xml = new XmlDocument();&&&&&&&&&&&&xml.Load( path );&&&&&&&&&&&&System.Xml.XmlElement root = xml.DocumentE&&&&&&&&&&&&System.Xml.XmlNode node = root.SelectSingleNode( "//" + nodeName );&&&&&&&&&&&&if (node != null)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlString = node.InnerT&&&&&&&&&&&&}&&&&&&&&&&&&return XmlS&&&&&&&&}&&&&&&&&#endregion&&&&&&&&#region 获取一个字符串xml文档中的ds&&&&&&&&/// &summary&&&&&&&&&/// 获取一个字符串xml文档中的ds&&&&&&&&/// &/summary&&&&&&&&&/// &param name="xml_string"&含有xml信息的字符串&/param&&&&&&&&&public static void get_XmlValue_ds( string xml_string, ref DataSet ds )&&&&&&&&{&&&&&&&&&&&&System.Xml.XmlDocument xd = new XmlDocument();&&&&&&&&&&&&xd.LoadXml( xml_string );&&&&&&&&&&&&XmlNodeReader xnr = new XmlNodeReader( xd );&&&&&&&&&&&&ds.ReadXml( xnr );&&&&&&&&&&&&xnr.Close();&&&&&&&&&&&&int a = ds.Tables.C&&&&&&&&}&&&&&&&&#endregion&&&&&&&&&#region 读取XML资源到DataTable中&&&&&&&&/// &summary&&&&&&&&&/// 读取XML资源到DataTable中&&&&&&&&/// &/summary&&&&&&&&&/// &param name="source"&XML资源,文件为路径,否则为XML字符串&/param&&&&&&&&&/// &param name="xmlType"&XML资源类型:文件,字符串&/param&&&&&&&&&/// &param name="tableName"&表名称&/param&&&&&&&&&/// &returns&DataTable&/returns&&&&&&&&&public static DataTable GetTable( string source, XmlType xmlType, string tableName )&&&&&&&&{&&&&&&&&&&&&DataSet ds = new DataSet();&&&&&&&&&&&&if (xmlType == XmlType.File)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&ds.ReadXml( source );&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlDocument xd = new XmlDocument();&&&&&&&&&&&&&&&&xd.LoadXml( source );&&&&&&&&&&&&&&&&XmlNodeReader xnr = new XmlNodeReader( xd );&&&&&&&&&&&&&&&&ds.ReadXml( xnr );&&&&&&&&&&&&}&&&&&&&&&&&&return ds.Tables[tableName];&&&&&&&&}&&&&&&&&#endregion&&&&&&&&&#region 读取XML资源中指定的DataTable的指定行指定列的值&&&&&&&&/// &summary&&&&&&&&&/// 读取XML资源中指定的DataTable的指定行指定列的值&&&&&&&&/// &/summary&&&&&&&&&/// &param name="source"&XML资源&/param&&&&&&&&&/// &param name="xmlType"&XML资源类型:文件,字符串&/param&&&&&&&&&/// &param name="tableName"&表名&/param&&&&&&&&&/// &param name="rowIndex"&行号&/param&&&&&&&&&/// &param name="colName"&列名&/param&&&&&&&&&/// &returns&值,不存在时返回Null&/returns&&&&&&&&&public static object GetTableCell( string source, XmlType xmlType, string tableName, int rowIndex, string colName )&&&&&&&&{&&&&&&&&&&&&DataSet ds = new DataSet();&&&&&&&&&&&&if (xmlType == XmlType.File)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&ds.ReadXml( source );&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlDocument xd = new XmlDocument();&&&&&&&&&&&&&&&&xd.LoadXml( source );&&&&&&&&&&&&&&&&XmlNodeReader xnr = new XmlNodeReader( xd );&&&&&&&&&&&&&&&&ds.ReadXml( xnr );&&&&&&&&&&&&}&&&&&&&&&&&&return ds.Tables[tableName].Rows[rowIndex][colName];&&&&&&&&}&&&&&&&&#endregion&&&&&&&&&#region 读取XML资源中指定的DataTable的指定行指定列的值&&&&&&&&/// &summary&&&&&&&&&/// 读取XML资源中指定的DataTable的指定行指定列的值&&&&&&&&/// &/summary&&&&&&&&&/// &param name="source"&XML资源&/param&&&&&&&&&/// &param name="xmlType"&XML资源类型:文件,字符串&/param&&&&&&&&&/// &param name="tableName"&表名&/param&&&&&&&&&/// &param name="rowIndex"&行号&/param&&&&&&&&&/// &param name="colIndex"&列号&/param&&&&&&&&&/// &returns&值,不存在时返回Null&/returns&&&&&&&&&public static object GetTableCell( string source, XmlType xmlType, string tableName, int rowIndex, int colIndex )&&&&&&&&{&&&&&&&&&&&&DataSet ds = new DataSet();&&&&&&&&&&&&if (xmlType == XmlType.File)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&ds.ReadXml( source );&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlDocument xd = new XmlDocument();&&&&&&&&&&&&&&&&xd.LoadXml( source );&&&&&&&&&&&&&&&&XmlNodeReader xnr = new XmlNodeReader( xd );&&&&&&&&&&&&&&&&ds.ReadXml( xnr );&&&&&&&&&&&&}&&&&&&&&&&&&return ds.Tables[tableName].Rows[rowIndex][colIndex];&&&&&&&&}&&&&&&&&#endregion&&&&&&&&&#region 将DataTable写入XML文件中&&&&&&&&/// &summary&&&&&&&&&/// 将DataTable写入XML文件中&&&&&&&&/// &/summary&&&&&&&&&/// &param name="dt"&含有数据的DataTable&/param&&&&&&&&&/// &param name="filePath"&文件路径&/param&&&&&&&&&public static void SaveTableToFile( DataTable dt, string filePath )&&&&&&&&{&&&&&&&&&&&&DataSet ds = new DataSet( "Config" );&&&&&&&&&&&&ds.Tables.Add( dt.Copy() );&&&&&&&&&&&&ds.WriteXml( filePath );&&&&&&&&}&&&&&&&&#endregion&&&&&&&&&#region 将DataTable以指定的根结点名称写入文件&&&&&&&&/// &summary&&&&&&&&&/// 将DataTable以指定的根结点名称写入文件&&&&&&&&/// &/summary&&&&&&&&&/// &param name="dt"&含有数据的DataTable&/param&&&&&&&&&/// &param name="rootName"&根结点名称&/param&&&&&&&&&/// &param name="filePath"&文件路径&/param&&&&&&&&&public static void SaveTableToFile( DataTable dt, string rootName, string filePath )&&&&&&&&{&&&&&&&&&&&&DataSet ds = new DataSet( rootName );&&&&&&&&&&&&ds.Tables.Add( dt.Copy() );&&&&&&&&&&&&ds.WriteXml( filePath );&&&&&&&&}&&&&&&&&#endregion&&&&&&&&&#region 使用DataSet方式更新XML文件节点&&&&&&&&/// &summary&&&&&&&&&/// 使用DataSet方式更新XML文件节点&&&&&&&&/// &/summary&&&&&&&&&/// &param name="filePath"&XML文件路径&/param&&&&&&&&&/// &param name="tableName"&表名称&/param&&&&&&&&&/// &param name="rowIndex"&行号&/param&&&&&&&&&/// &param name="colName"&列名&/param&&&&&&&&&/// &param name="content"&更新值&/param&&&&&&&&&/// &returns&更新是否成功&/returns&&&&&&&&&public static bool UpdateTableCell( string filePath, string tableName, int rowIndex, string colName, string content )&&&&&&&&{&&&&&&&&&&&&bool flag = false;&&&&&&&&&&&&DataSet ds = new DataSet();&&&&&&&&&&&&ds.ReadXml( filePath );&&&&&&&&&&&&DataTable dt = ds.Tables[tableName];&&&&&&&&&&&&&if (dt.Rows[rowIndex][colName] != null)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&dt.Rows[rowIndex][colName] =&&&&&&&&&&&&&&&&ds.WriteXml( filePath );&&&&&&&&&&&&&&&&flag = true;&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&flag = false;&&&&&&&&&&&&}&&&&&&&&&&&&return &&&&&&&&}&&&&&&&&#endregion&&&&&&&&&#region 使用DataSet方式更新XML文件节点&&&&&&&&/// &summary&&&&&&&&&/// 使用DataSet方式更新XML文件节点&&&&&&&&/// &/summary&&&&&&&&&/// &param name="filePath"&XML文件路径&/param&&&&&&&&&/// &param name="tableName"&表名称&/param&&&&&&&&&/// &param name="rowIndex"&行号&/param&&&&&&&&&/// &param name="colIndex"&列号&/param&&&&&&&&&/// &param name="content"&更新值&/param&&&&&&&&&/// &returns&更新是否成功&/returns&&&&&&&&&public static bool UpdateTableCell( string filePath, string tableName, int rowIndex, int colIndex, string content )&&&&&&&&{&&&&&&&&&&&&bool flag = false;&&&&&&&&&&&&&DataSet ds = new DataSet();&&&&&&&&&&&&ds.ReadXml( filePath );&&&&&&&&&&&&DataTable dt = ds.Tables[tableName];&&&&&&&&&&&&&if (dt.Rows[rowIndex][colIndex] != null)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&dt.Rows[rowIndex][colIndex] =&&&&&&&&&&&&&&&&ds.WriteXml( filePath );&&&&&&&&&&&&&&&&flag = true;&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&flag = false;&&&&&&&&&&&&}&&&&&&&&&&&&return &&&&&&&&}&&&&&&&&#endregion&&&&&&&&&#region 读取XML资源中的指定节点内容&&&&&&&&/// &summary&&&&&&&&&/// 读取XML资源中的指定节点内容&&&&&&&&/// &/summary&&&&&&&&&/// &param name="source"&XML资源&/param&&&&&&&&&/// &param name="xmlType"&XML资源类型:文件,字符串&/param&&&&&&&&&/// &param name="nodeName"&节点名称&/param&&&&&&&&&/// &returns&节点内容&/returns&&&&&&&&&public static object GetNodeValue( string source, XmlType xmlType, string nodeName )&&&&&&&&{&&&&&&&&&&&&XmlDocument xd = new XmlDocument();&&&&&&&&&&&&if (xmlType == XmlType.File)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&xd.Load( source );&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&xd.LoadXml( source );&&&&&&&&&&&&}&&&&&&&&&&&&XmlElement xe = xd.DocumentE&&&&&&&&&&&&XmlNode xn = xe.SelectSingleNode( "//" + nodeName );&&&&&&&&&&&&if (xn != null)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&return xn.InnerT&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&return null;&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&&/// &summary&&&&&&&&&/// 读取XML资源中的指定节点内容&&&&&&&&/// &/summary&&&&&&&&&/// &param name="source"&XML资源&/param&&&&&&&&&/// &param name="nodeName"&节点名称&/param&&&&&&&&&/// &returns&节点内容&/returns&&&&&&&&&public static object GetNodeValue( string source, string nodeName )&&&&&&&&{&&&&&&&&&&&&if (source == null || nodeName == null || source == "" || nodeName == "" || source.Length & nodeName.Length * 2)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&return null;&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&int start = source.IndexOf( "&" + nodeName + "&" ) + nodeName.Length + 2;&&&&&&&&&&&&&&&&int end = source.IndexOf( "&/" + nodeName + "&" );&&&&&&&&&&&&&&&&if (start == -1 || end == -1)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&return null;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&else if (start &= end)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&return null;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&return source.Substring( start, end - start );&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&#endregion&&&&&&&&&#region 更新XML文件中的指定节点内容&&&&&&&&/// &summary&&&&&&&&&/// 更新XML文件中的指定节点内容&&&&&&&&/// &/summary&&&&&&&&&/// &param name="filePath"&文件路径&/param&&&&&&&&&/// &param name="nodeName"&节点名称&/param&&&&&&&&&/// &param name="nodeValue"&更新内容&/param&&&&&&&&&/// &returns&更新是否成功&/returns&&&&&&&&&public static bool UpdateNode( string filePath, string nodeName, string nodeValue )&&&&&&&&{&&&&&&&&&&&&bool flag = false;&&&&&&&&&&&&&XmlDocument xd = new XmlDocument();&&&&&&&&&&&&xd.Load( filePath );&&&&&&&&&&&&XmlElement xe = xd.DocumentE&&&&&&&&&&&&XmlNode xn = xe.SelectSingleNode( "//" + nodeName );&&&&&&&&&&&&if (xn != null)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&xn.InnerText = nodeV&&&&&&&&&&&&&&&&flag = true;&&&&&&&&&&&&}&&&&&&&&&&&&else&&&&&&&&&&&&{&&&&&&&&&&&&&&&&flag = false;&&&&&&&&&&&&}&&&&&&&&&&&&return &&&&&&&&}&&&&&&&&#endregion&&&&&&&&&&/// &summary&&&&&&&&&/// 读取xml文件,并将文件序列化为类&&&&&&&&/// &/summary&&&&&&&&&/// &typeparam name="T"&&/typeparam&&&&&&&&&/// &param name="path"&&/param&&&&&&&&&/// &returns&&/returns&&&&&&&&&public static T ReadXML&T&( string path )&&&&&&&&{&&&&&&&&&&&&XmlSerializer reader = new XmlSerializer( typeof( JJDB ) );&&&&&&&&&&&&StreamReader file = new StreamReader( @path );&&&&&&&&&&&&return (T)reader.Deserialize( file );&&&&&&&&}&&&&&&&&&/// &summary&&&&&&&&&/// 将对象写入XML文件&&&&&&&&/// &/summary&&&&&&&&&/// &typeparam name="T"&C#对象名&/typeparam&&&&&&&&&/// &param name="item"&对象实例&/param&&&&&&&&&/// &param name="path"&路径&/param&&&&&&&&&/// &param name="jjdbh"&标号&/param&&&&&&&&&/// &param name="ends"&结束符号(整个xml的路径类似如下:C:\xmltest\201111send.xml,其中path=C:\xmltest,jjdbh=201111,ends=send)&/param&&&&&&&&&/// &returns&&/returns&&&&&&&&&public static string WriteXML&T&( T item, string path, string jjdbh, string ends )&&&&&&&&{&&&&&&&&&&&&if (string.IsNullOrEmpty( ends ))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ends = "send";&&&&&&&&&&&&}&&&&&&&&&&&&int i = 0;&&&&&&&&&&&&XmlSerializer serializer = new XmlSerializer( item.GetType() );&&&&&&&&&&&&object[] obj = new object[] { path, "\\", jjdbh, ends, ".xml" };&&&&&&&&&&&&string xmlPath = String.Concat( obj );&&&&&&&&&&&&while (true)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&try&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&FileS&&&&&&&&&&&&&&&&&&&&fs = File.Create( xmlPath );&&&&&&&&&&&&&&&&&&&&fs.Close();&&&&&&&&&&&&&&&&&&&&TextWriter writer = new StreamWriter( xmlPath, false, Encoding.UTF8 );&&&&&&&&&&&&&&&&&&&&XmlSerializerNamespaces xml = new XmlSerializerNamespaces();&&&&&&&&&&&&&&&&&&&&xml.Add( string.Empty, string.Empty );&&&&&&&&&&&&&&&&&&&&serializer.Serialize( writer, item, xml );&&&&&&&&&&&&&&&&&&&&writer.Flush();&&&&&&&&&&&&&&&&&&&&writer.Close();&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&catch (Exception exec)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&if (i & 5)&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&i++;&&&&&&&&&&&&&&&&&&&&&&&&continue;&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&{ break; }&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&return SerializeToXmlStr&T&( item, true );&&&&&&&&}&&&&&&&&&/// &summary&&&&&&&&&/// 静态扩展&&&&&&&&/// &/summary&&&&&&&&&/// &typeparam name="T"&需要序列化的对象类型,必须声明[Serializable]特征&/typeparam&&&&&&&&&/// &param name="obj"&需要序列化的对象&/param&&&&&&&&&/// &param name="omitXmlDeclaration"&true:省略XML声明;否则为false.默认false,即编写 XML 声明。&/param&&&&&&&&&/// &returns&&/returns&&&&&&&&&public static string SerializeToXmlStr&T&( T obj, bool omitXmlDeclaration )&&&&&&&&{&&&&&&&&&&&&&return XmlSerialize&T&( obj, omitXmlDeclaration );&&&&&&&&}&&&&&&&&#region XML序列化反序列化相关的静态方法&&&&&&&&/// &summary&&&&&&&&&/// 使用XmlSerializer序列化对象&&&&&&&&/// &/summary&&&&&&&&&/// &typeparam name="T"&需要序列化的对象类型,必须声明[Serializable]特征&/typeparam&&&&&&&&&/// &param name="obj"&需要序列化的对象&/param&&&&&&&&&/// &param name="omitXmlDeclaration"&true:省略XML声明;否则为false.默认false,即编写 XML 声明。&/param&&&&&&&&&/// &returns&序列化后的字符串&/returns&&&&&&&&&public static string XmlSerialize&T&( T obj, bool omitXmlDeclaration )&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&XmlWriterSettings xmlSettings = new XmlWriterSettings();&&&&&&&&&&&&xmlSettings.OmitXmlDeclaration = omitXmlD&&&&&&&&&&&&xmlSettings.Encoding = new System.Text.UTF8Encoding( false );&&&&&&&&&&&&MemoryStream stream = new MemoryStream();&&&&&&&&&&&&XmlWriter xmlwriter = XmlWriter.Create( stream, xmlSettings ); &&&&&&&&&&&&XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();&&&&&&&&&&&&xmlns.Add( String.Empty, String.Empty ); &&&&&&&&&&&&XmlSerializer ser = new XmlSerializer( typeof( T ) );&&&&&&&&&&&&ser.Serialize( xmlwriter, obj, xmlns );&&&&&&&&&&&&&return Encoding.UTF8.GetString( stream.ToArray() );&&&&&&&&}&&&&&&&&&/// &summary&&&&&&&&&/// 使用XmlSerializer序列化对象&&&&&&&&/// &/summary&&&&&&&&&/// &typeparam name="T"&&/typeparam&&&&&&&&&/// &param name="path"&文件路径&/param&&&&&&&&&/// &param name="obj"&需要序列化的对象&/param&&&&&&&&&/// &param name="omitXmlDeclaration"&true:省略XML声明;否则为false.默认false,即编写 XML 声明。&/param&&&&&&&&&/// &param name="removeDefaultNamespace"&是否移除默认名称空间(如果对象定义时指定了:XmlRoot(Namespace = "")则需要传false值进来)&/param&&&&&&&&&/// &returns&序列化后的字符串&/returns&&&&&&&&&public static void XmlSerialize&T&( string path, T obj, bool omitXmlDeclaration, bool removeDefaultNamespace )&&&&&&&&{&&&&&&&&&&&&XmlWriterSettings xmlSetings = new XmlWriterSettings();&&&&&&&&&&&&xmlSetings.OmitXmlDeclaration = omitXmlD&&&&&&&&&&&&using (XmlWriter xmlwriter = XmlWriter.Create( path, xmlSetings ))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();&&&&&&&&&&&&&&&&if (removeDefaultNamespace)&&&&&&&&&&&&&&&&&&&&xmlns.Add( String.Empty, String.Empty ); &&&&&&&&&&&&&&&&XmlSerializer ser = new XmlSerializer( typeof( T ) );&&&&&&&&&&&&&&&&ser.Serialize( xmlwriter, obj, xmlns );&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&&private static byte[] ShareReadFile( string filePath )&&&&&&&&{&&&&&&&&&&&&byte[]&&&&&&&&&&&&&&&&&&&&&&&&using (FileStream fs = new FileStream( filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&bytes = new byte[fs.Length];&&&&&&&&&&&&&&&&int numBytesToRead = (int)fs.L&&&&&&&&&&&&&&&&int numBytesRead = 0;&&&&&&&&&&&&&&&&while (numBytesToRead & 0)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&int n = fs.Read( bytes, numBytesRead, numBytesToRead );&&&&&&&&&&&&&&&&&&&&if (n == 0)&&&&&&&&&&&&&&&&&&&&&&&&break;&&&&&&&&&&&&&&&&&&&&numBytesRead +=&&&&&&&&&&&&&&&&&&&&numBytesToRead -=&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&return &&&&&&&&}&&&&&&&&/// &summary&&&&&&&&&/// 从文件读取并反序列化为对象 (解决: 多线程或多进程下读写并发问题)&&&&&&&&/// &/summary&&&&&&&&&/// &typeparam name="T"&返回的对象类型&/typeparam&&&&&&&&&/// &param name="path"&文件地址&/param&&&&&&&&&/// &returns&&/returns&&&&&&&&&public static T XmlFileDeserialize&T&( string path )&&&&&&&&{&&&&&&&&&&&&byte[] bytes = ShareReadFile( path );&&&&&&&&&&&&if (bytes.Length & 1)&&&&&&&&&&&&&&&&for (int i = 0; i & 5; i++)&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&bytes = ShareReadFile( path ); &&&&&&&&&&&&&&&&&&&&if (bytes.Length & 0) break;&&&&&&&&&&&&&&&&&&&&System.Threading.Thread.Sleep( 50 ); &&&&&&&&&&&&&&&&}&&&&&&&&&&&&XmlDocument doc = new XmlDocument();&&&&&&&&&&&&doc.Load( new MemoryStream( bytes ) );&&&&&&&&&&&&if (doc.DocumentElement != null)&&&&&&&&&&&&&&&&return (T)new XmlSerializer( typeof( T ) ).Deserialize( new XmlNodeReader( doc.DocumentElement ) );&&&&&&&&&&&&return default( T );&&&&&&&&&&&&XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();&&&&&&&&&&&&xmlReaderSettings.CloseInput = true;&&&&&&&&&&&&using (XmlReader xmlReader = XmlReader.Create( path, xmlReaderSettings ))&&&&&&&&&&&&{&&&&&&&&&&&&&&&&T obj = (T)new XmlSerializer( typeof( T ) ).Deserialize( xmlReader );&&&&&&&&&&&&&&&&return &&&&&&&&&&&&}&&&&&&&&}&&&&&&&&&/// &summary&&&&&&&&&/// 使用XmlSerializer反序列化对象&&&&&&&&/// &/summary&&&&&&&&&/// &param name="xmlOfObject"&需要反序列化的xml字符串&/param&&&&&&&&&/// &returns&反序列化后的对象&/returns&&&&&&&&&public static T XmlDeserialize&T&( string xmlOfObject ) where T : class&&&&&&&&{&&&&&&&&&&&&XmlReader xmlReader = XmlReader.Create( new StringReader( xmlOfObject ), new XmlReaderSettings() );&&&&&&&&&&&&return (T)new XmlSerializer( typeof( T ) ).Deserialize( xmlReader );&&&&&&&&}&&&&&&&&&#endregion&&&&}
[转]&[转]&[转]&
喜欢该文的人也喜欢

我要回帖

更多关于 android解析xml文件 的文章

 

随机推荐