c#解析xml文件<--1-->

原创
2016/03/14 16:15
阅读数 423

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Xml;

namespace xml

{

    class Program

    {

        static void Main(string[] args)

        {

            model mdl = new model();

            AnalyseXml anlysXml = new AnalyseXml();

            string file = @"E:\me\xml\xml\demo.xml";//文件的路径;

            string path0 = "/p:root/p:books/p:book[1]/p:name";//节点路径

            string path1 = "/p:root/p:books/p:book[1]/p:author";

            string path2 = "/p:root/p:books/p:book[1]/p:price";

            anlysXml.LoadXml(file);//加载文件;

            anlysXml.AddNamespaceManager("p", "bookNameSpacea");

            mdl.Name = anlysXml.GetNodeValue(path0);

            mdl.Author = anlysXml.GetNodeValue(path1);

            mdl.Price = anlysXml.GetNodeValue(path2);

            Console.WriteLine(mdl.Name);

            Console.WriteLine(mdl.Author);

            Console.WriteLine(mdl.Price);

        }

    }

    /// <summary>

    /// 建立xml节点模型,这里只是一个例子,具体模型还要看具体问题。

    /// </summary>

    class model

    {

        private string name, author, price;

        public string Name

        {

            set { this.name = value;}

            get { return name; }

        }

        public string Author

        {

            set { this.author = value;}

            get { return author; }

        }

        public string Price

        {

            set { this.price = value; }

            get { return price; }

        }

    }

    /// <summary>

    /// 对xml文件的操作

    /// </summary>

    class AnalyseXml

    {

        /// <summary>

        /// doc,xml文档

        /// </summary>

        protected XmlDocument doc = null;

        /// <summary>

        /// root,xml文档的根节点

        /// </summary>

        protected XmlElement root = null;

        /// <summary>

        /// nsmgr,xml命名空间管理

        /// </summary>

        protected XmlNamespaceManager nsmgr = null;

        /// <summary>

        /// 加载xml文件

        /// </summary>

        /// <param name="file"></param>

        public void LoadXml(string filePath)

        {

            FileInfo xmlFile = new FileInfo(filePath);

            if (!xmlFile.Exists || xmlFile == null)

            {

                throw new FileNotFoundException("未找到要加载的{0}文件", xmlFile.FullName);

            }

            else

            {

                this.doc = new XmlDocument();

                doc.Load(xmlFile.FullName);//把文件的全路径当做参数加载到doc上,实现文件的加载;

                root = doc.DocumentElement;//获得xml文件的根节点;

                nsmgr = new XmlNamespaceManager(doc.NameTable);//把与xml文件关联的XmlNameTable作为参数传入到xmlNamespaceManager

            }

        }

        /// <summary>

        /// 为XmlNamespaceManager添加prefix与namespace映射。

        /// </summary>

        /// <param name="prefix"></param>

        /// <param name="nameSpace"></param>

        public void AddNamespaceManager(string prefix, string nameSpace)

        {

            this.nsmgr.AddNamespace(prefix, nameSpace);

        }

        /// <summary>

        /// 获取节点内的信息

        /// </summary>

        /// <param name="xPath">xpath路径表达式</param>

        /// <returns></returns>

        public string GetNodeValue(string xPath)

        {

            XmlNode xNode = root.SelectSingleNode(xPath, nsmgr);//实现了前缀与命名空间的转化,并且选中的要得到的元素节点

            if (xNode == null)

                return null;

            else

                return xNode.InnerXml;//指获取当前节点内的所有信息,包含元素节点标签。InnerText表示只获取元素节点的值。

        }

        /// <summary>

        /// 改变当前的NodeValue


        /// </summary>

        /// <param name="xPath"></param>

        /// <param name="Value"></param>

        public void ChangeNodeValue(string xPath, string Value)

        {

            XmlNode xNode = root.SelectSingleNode(xPath, nsmgr);

            xNode.InnerXml = Value;

        }

    }

}

下边是我的xml文件
<?xml version="1.0" encoding="utf-8" ?>
<p:root xmlns:p="bookNameSpacea">
  <p:books>
    <p:book>
      <p:name>冰与火之歌</p:name>
      <p:author>外国人</p:author>
      <p:price>10</p:price>
    </p:book>
    <book>
      <name>龙族</name>
      <author>江南</author>
      <price>20</price>
    </book>
    <book>
      <name>数据结构与算法原理</name>
      <author>未知</author>
      <price>30</price>
    </book>
  </p:books>
</p:root>


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
1
分享
返回顶部
顶部