c#操作xml文件示例
1. 新增XML文件
XMLToolV2 _xmlHelper = new XMLToolV2(@"C:\20140311blogs.xml");//xml保存路徑或者讀取路徑
_xmlHelper.Create("Person", "utf-8");//跟節(jié)點(diǎn)名稱:person;encode:utf-8
XmlElement _person = _xmlHelper.CreateElec("Name", "Yan-Zhiwei");//在跟節(jié)點(diǎn)后創(chuàng)建person節(jié)點(diǎn)
_xmlHelper.SetAttribute(_person, "Gender", "Man");//設(shè)置person節(jié)點(diǎn)屬性Gender
_xmlHelper.SetAttribute(_person, "Address", "shanghai");//設(shè)置person節(jié)點(diǎn)屬性Address
_xmlHelper.Save();//保存xml文件
上述代碼實(shí)現(xiàn)效果:

那在Person節(jié)點(diǎn)繼續(xù)增加節(jié)點(diǎn),實(shí)現(xiàn)也很簡(jiǎn)單
_xmlHelper.Create("Person", "utf-8");//跟節(jié)點(diǎn)名稱:person;encode:utf-8
XmlElement _person = _xmlHelper.CreateElec("Name", "Yan-Zhiwei");//在跟節(jié)點(diǎn)后創(chuàng)建person節(jié)點(diǎn)
_xmlHelper.SetAttribute(_person, "Gender", "Man");//設(shè)置person節(jié)點(diǎn)屬性Gender
_xmlHelper.SetAttribute(_person, "Address", "shanghai");//設(shè)置person節(jié)點(diǎn)屬性Address
XmlElement _workLh = _xmlHelper.CreateElec(_person, "Work", "shanghai LH");//在person節(jié)點(diǎn)下增加work節(jié)點(diǎn)
_xmlHelper.SetAttribute(_workLh, "Year", "2013~");//設(shè)置work節(jié)點(diǎn)屬性Title
XmlElement _workRK = _xmlHelper.CreateElec(_person, "Work", "shanghai Ranking");//在person節(jié)點(diǎn)下增加work節(jié)點(diǎn)
_xmlHelper.SetAttribute(_workRK, "Year", "2011~2013");//設(shè)置work節(jié)點(diǎn)屬性Title
_xmlHelper.Save();//保存xml文件
上述代碼實(shí)現(xiàn)效果:

2.讀取節(jié)點(diǎn)的值,個(gè)人感覺(jué)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);
});
上述代碼實(shí)現(xiàn)效果:

3.格式化顯示XML
XMLToolV2 _xmlHelper = new XMLToolV2(@"C:\20140311blogs.xml");//xml保存路徑或者讀取路徑
string _xmlString = _xmlHelper.ShowXml();
Console.WriteLine(XMLToolV2.FormatXml(_xmlString, "utf-8"));
上述代碼實(shí)現(xiàn)效果:

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#使用XML序列化操作菜單的方法
- C#針對(duì)xml基本操作及保存配置文件應(yīng)用實(shí)例
- C#操作XML文件實(shí)例匯總
- c#操作xml幫助類分享(xml增刪改查)
- c#對(duì)xml增刪改查操作示例
- C#對(duì)XML文件的各種操作實(shí)現(xiàn)方法
- C# 操作XML文檔 使用XmlDocument類方法
- C# 對(duì)XML基本操作代碼總結(jié)
- C# XML操作 代碼大全(讀XML,寫(xiě)XML,更新,刪除節(jié)點(diǎn),與dataset結(jié)合等)
- asp.net(C#) Xml操作(增刪改查)練習(xí)
- c#對(duì)xml的簡(jiǎn)單操作
- C#實(shí)現(xiàn)的XML操作類實(shí)例
相關(guān)文章
c# SQLHelper(for winForm)實(shí)現(xiàn)代碼
數(shù)據(jù)連接池c# SQLHelper 實(shí)現(xiàn)代碼2009-02-02
C# TreeView讀取數(shù)據(jù)庫(kù)簡(jiǎn)單實(shí)例
這篇文章主要介紹了2013-12-12
C#制作多線程處理強(qiáng)化版網(wǎng)絡(luò)爬蟲(chóng)
這篇文章主要介紹了C#制作多線程處理強(qiáng)化版網(wǎng)絡(luò)爬蟲(chóng)的相關(guān)代碼,有想學(xué)習(xí)C#多線程編程的小伙伴可以參考下2016-09-09
WPF TextBox實(shí)現(xiàn)按字節(jié)長(zhǎng)度限制輸入功能
這篇文章主要為大家詳細(xì)介紹了WPF TextBox實(shí)現(xiàn)按字節(jié)長(zhǎng)度限制輸入功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

