c#操作xml文件示例

 更新时间:2014年03月12日 15:05:26   作者:  
对于XML读写操作,项目中经常要用到,之前木有好好总结过,例如LINQ TO XML也用过,这次无意发现XPATH对于XML的查询极为方便,索性把XML的操作总结以便后续方便使用

1. 新增XML文件

复制代码 代码如下:

XMLToolV2 _xmlHelper = new XMLToolV2(@"C:\20140311blogs.xml");//xml保存路径或者读取路径
 _xmlHelper.Create("Person", "utf-8");//跟节点名称:person;encode:utf-8
 XmlElement _person = _xmlHelper.CreateElec("Name", "Yan-Zhiwei");//在跟节点后创建person节点
 _xmlHelper.SetAttribute(_person, "Gender", "Man");//设置person节点属性Gender
 _xmlHelper.SetAttribute(_person, "Address", "shanghai");//设置person节点属性Address
 _xmlHelper.Save();//保存xml文件

上述代码实现效果:

那在Person节点继续增加节点,实现也很简单

复制代码 代码如下:

_xmlHelper.Create("Person", "utf-8");//跟节点名称:person;encode:utf-8
XmlElement _person = _xmlHelper.CreateElec("Name", "Yan-Zhiwei");//在跟节点后创建person节点
_xmlHelper.SetAttribute(_person, "Gender", "Man");//设置person节点属性Gender
_xmlHelper.SetAttribute(_person, "Address", "shanghai");//设置person节点属性Address
XmlElement _workLh = _xmlHelper.CreateElec(_person, "Work", "shanghai LH");//在person节点下增加work节点
_xmlHelper.SetAttribute(_workLh, "Year", "2013~");//设置work节点属性Title
XmlElement _workRK = _xmlHelper.CreateElec(_person, "Work", "shanghai Ranking");//在person节点下增加work节点
_xmlHelper.SetAttribute(_workRK, "Year", "2011~2013");//设置work节点属性Title
_xmlHelper.Save();//保存xml文件

上述代码实现效果:

2.读取节点的值,个人感觉xpath方式比linq to xml更为明了方便

复制代码 代码如下:

XMLToolV2 _xmlHelper = new XMLToolV2(@"C:\20140311blogs.xml");//xml保存路径或者读取路径
XmlNode _person = _xmlHelper.Select("Person/Name/text()");
Console.WriteLine("Name:" + _person.InnerText);
XmlNode _gender = _xmlHelper.Select("Person/Name[@Gender='Man']");
Console.WriteLine("Gender:" + _gender.Attributes["Gender"].Value);
Console.WriteLine("Address:" + _gender.Attributes["Address"].Value);
Console.WriteLine("-----------------------------");
XmlNodeList _workRecord = _xmlHelper.SelectNodeList("Person/Name/Work");
XMLToolV2.Loop(_workRecord, (XmlNode node) =>
{
    Console.WriteLine("Work:" + node.InnerText + " Year:" + node.Attributes["Year"].Value);
});


上述代码实现效果:

3.格式化显示XML

复制代码 代码如下:

XMLToolV2 _xmlHelper = new XMLToolV2(@"C:\20140311blogs.xml");//xml保存路径或者读取路径
string _xmlString = _xmlHelper.ShowXml();
Console.WriteLine(XMLToolV2.FormatXml(_xmlString, "utf-8"));


上述代码实现效果:

4.XMLToolV2源代码

复制代码 代码如下:

public class XMLToolV2
    {
        static string _xmlPath;
        static XmlDocument _xmlDoc { get; set; }
        static XmlElement _xmlRoot;


        public XMLToolV2(string xmlPath)
        {
            _xmlPath = xmlPath;
            LoadXmlDoc();
        }
        public XmlNode Select(string xPath)
        {
            if (string.IsNullOrEmpty(xPath))
                throw new ArgumentNullException("xPath");
            return _xmlDoc.SelectSingleNode(xPath);
        }
        public XmlNodeList SelectNodeList(string xPath)
        {
            if (string.IsNullOrEmpty(xPath))
                throw new ArgumentNullException("xPath");
            return _xmlDoc.SelectNodes(xPath);
        }
        public void Create(string rootName, string encode)
        {
            CreateXmlDoc(rootName, encode);
        }
        private void CreateXmlDoc(string rootName, string encode)
        {
            if (!File.Exists(_xmlPath))
            {
                if (string.IsNullOrEmpty(rootName))
                    throw new ArgumentNullException(rootName);
                _xmlDoc = new XmlDocument();
                XmlDeclaration _xmldecl = _xmlDoc.CreateXmlDeclaration("1.0", encode, null);
                _xmlDoc.AppendChild(_xmldecl);
                _xmlRoot = _xmlDoc.CreateElement("", rootName, "");
                _xmlDoc.AppendChild(_xmlRoot);
            }
        }
        public void LoadXmlDoc()
        {
            if (File.Exists(_xmlPath))
            {
                _xmlDoc = new XmlDocument();
                _xmlDoc.Load(_xmlPath);
                _xmlRoot = _xmlDoc.DocumentElement;
            }
        }
        public void Save()
        {
            if (_xmlDoc != null)
            {
                _xmlDoc.Save(_xmlPath);
            }
        }
        public XmlElement CreateElec(string elecName, string elecValue)
        {
            XmlElement _xElec = CreateElement(_xmlRoot, elecName, elecValue);
            return _xElec;
        }

        private XmlElement CreateElement(XmlNode _xmldocSelect, string elecName, string elecValue)
        {
            if (_xmldocSelect != null)
            {
                XmlElement _xElec = _xmlDoc.CreateElement(elecName);
                _xElec.InnerText = elecValue;
                _xmldocSelect.AppendChild(_xElec);
                return _xElec;
            }
            return null;
        }

        public XmlElement CreateElec(XmlElement xmlParentElec, string elecName, string elecValue)
        {
            if (xmlParentElec != null)
            {
                XmlElement _xElec = CreateElement(xmlParentElec, elecName, elecValue);
                return _xElec;
            }
            return null;
        }
        public void SetAttribute(XmlElement xElement, string attrName, string attrValue)
        {
            if (xElement != null)
            {
                xElement.SetAttribute(attrName, attrValue);
            }
        }
        public int Check(string xpath)
        {
            if (string.IsNullOrEmpty(xpath))
                throw new ArgumentNullException("xpath");
            return SelectNodeList(xpath).Count;
        }
        public string ShowXml()
        {
            if (_xmlDoc != null)
            {
                return _xmlDoc.OuterXml;
            }
            return string.Empty;
        }
        public static string FormatXml(string xmlString, string encode)
        {
            if (string.IsNullOrEmpty(xmlString))
                throw new ArgumentNullException("xmlString");
            if (string.IsNullOrEmpty(encode))
                throw new ArgumentNullException("encode");
            MemoryStream _mstream = new MemoryStream();
            XmlTextWriter _writer = new XmlTextWriter(_mstream, null);
            XmlDocument _xDoc = new XmlDocument();
            _writer.Formatting = Formatting.Indented;

            _xDoc.LoadXml(xmlString);
            _xDoc.WriteTo(_writer);
            _writer.Flush();
            _writer.Close();

            Encoding _encoding = Encoding.GetEncoding(encode);
            string _xmlString = _encoding.GetString(_mstream.ToArray());
            _mstream.Close();
            return _xmlString;
        }
        public static void Loop(XmlNodeList nodeList, Action<XmlNode> xmlNode)
        {
            if (nodeList != null)
            {
                foreach (XmlNode xNode in nodeList)
                {
                    xmlNode(xNode);
                }
            }
        }
    }

相关文章

  • C#异步调用示例详解

    C#异步调用示例详解

    这篇文章主要为大家详细介绍了C#异步调用的示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 基于C#制作一个飞机大战小游戏的全过程

    基于C#制作一个飞机大战小游戏的全过程

    飞机大战小游戏详细大家都不陌生,下面这篇文章主要给大家介绍了关于基于C#制作一个飞机大战小游戏的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*

    C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*

    大家在银行交易某些业务时,都可以看到无论是身份证、银行账号中间部分都是用*号替换的,下面这篇文章主要介绍C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*的相关资料,需要的朋友可以参考下
    2015-08-08
  • oledb连接access数据库示例

    oledb连接access数据库示例

    本文为大家介绍一个oledb连接access数据库的示例,代码很简单,可以直接使用
    2014-01-01
  • c# 抓取Web网页数据分析

    c# 抓取Web网页数据分析

    通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序。比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名。分析系统在根据得到的数据进行数据分析。为业务提供参考数据。
    2008-11-11
  • C#访问网络共享文件夹的方法

    C#访问网络共享文件夹的方法

    这篇文章主要为大家详细介绍了C#访问网络共享文件夹的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • C#目录和文件管理操作详解

    C#目录和文件管理操作详解

    在C#中常用的目录操作类有Directory,DirectoryInfo,下面这篇文章主要给大家介绍了关于C#目录和文件管理操作的相关资料,需要的朋友可以参考下
    2022-10-10
  • Winform项目中使用FastReport.Net报表控件

    Winform项目中使用FastReport.Net报表控件

    这篇文章介绍了Winform项目中使用FastReport.Net报表控件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Unity实现UI渐隐渐显效果

    Unity实现UI渐隐渐显效果

    这篇文章主要为大家详细介绍了Unity实现UI渐隐渐显效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C#实现文字转语音功能

    C#实现文字转语音功能

    这篇文章主要为大家详细介绍了C#实现文字转语音功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论