using System;算法
using System.Collections.Generic;c#
using System.Linq;数据结构
using System.Text;this
using System.IO;spa
using System.Xml;code
namespace xmlxml
{utf-8
class Program文档
{get
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>