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>