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>