|
1. 新增XML文件 XMLToolV2 _xmlHelper = new XMLToolV2(@"C:\20140311blogs.xml");//xml保存路径或者读取路径 _xmlHelper.Create("Person", "utf-8");//跟节点名称:person;encode:utf-8 XmlElement _person = _xmlHelper.CreateElec("Name", "Yan-Zhiwei");//在跟节点后创建person节点 _xmlHelper.SetAttribute(_person, "Gender", "Man");//设置person节点属性Gender _xmlHelper.SetAttribute(_person, "Address", "shanghai");//设置person节点属性Address _xmlHelper.Save();//保存xml文件
上述代码实现效果:

那在Person节点继续增加节点,实现也很简单 _xmlHelper.Create("Person", "utf-8");//跟节点名称:person;encode:utf-8 XmlElement _person = _xmlHelper.CreateElec("Name", "Yan-Zhiwei");//在跟节点后创建person节点 _xmlHelper.SetAttribute(_person, "Gender", "Man");//设置person节点属性Gender _xmlHelper.SetAttribute(_person, "Address", "shanghai");//设置person节点属性Address XmlElement _workLh = _xmlHelper.CreateElec(_person, "Work", "shanghai LH");//在person节点下增加work节点 _xmlHelper.SetAttribute(_workLh, "Year", "2013~");//设置work节点属性Title XmlElement _workRK = _xmlHelper.CreateElec(_person, "Work", "shanghai Ranking");//在person节点下增加work节点 _xmlHelper.SetAttribute(_workRK, "Year", "2011~2013");//设置work节点属性Title _xmlHelper.Save();//保存xml文件
上述代码实现效果:

2.读取节点的值,个人感觉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); });
上述代码实现效果:

3.格式化显示XML XMLToolV2 _xmlHelper = new XMLToolV2(@"C:\20140311blogs.xml");//xml保存路径或者读取路径 string _xmlString = _xmlHelper.ShowXml(); Console.WriteLine(XMLToolV2.FormatXml(_xmlString, "utf-8"));
上述代码实现效果:

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); } } } }
|