广州建设厅官方网站,医院网站建设实施方案,上海企业登记全程电子化服务平台,网站运作模式Xml文件相关操作
C#中的XML是一种可扩展标记语言#xff08;Extensible Markup Language#xff09;#xff0c;用于存储和交换数据。在C#中#xff0c;我们可以使用内置的System.Xml命名空间来处理和操作XML数据。
一、关键概念
1. 标签#xff08;Tags#xff09;
…Xml文件相关操作
C#中的XML是一种可扩展标记语言Extensible Markup Language用于存储和交换数据。在C#中我们可以使用内置的System.Xml命名空间来处理和操作XML数据。
一、关键概念
1. 标签Tags
XML 使用标签来标识数据的起始和结束。标签由尖括号包围可以包含标签名称和属性。
2. 元素Elements
元素是包含数据的基本单位。它由一个起始标签和一个结束标签组成。例如nameJohn/name 是一个名为 “name” 的元素其内容为 “John”。
3. 属性Attributes
属性提供关于元素的附加信息。它们以名称-值对的形式存在于元素的起始标签中。例如person age25John/person 中的 “age” 是一个属性其值为 “25”。
4. 命名空间Namespaces
命名空间用于避免元素和属性名称的冲突。它通过给元素和属性添加命名空间前缀来实现。例如ns:person ns:age25John/ns:person 中的 “ns” 是命名空间前缀。
5. 注释Comments
注释用于在 XML 中添加注释信息以提供更多的说明和解释。注释以 !-- 开始以 -- 结束。
6. CDATACharacter Data
CDATA 用于在 XML 中包含特殊字符如 和 而不被解析器解释为标签。CDATA 部分以 ![CDATA[ 开始以 ]] 结束。
二、 XML操作版本1
1. 创建XML文档
使用XmlDocument类来创建一个新的XML文档并添加元素、属性和文本等内容。
XmlDocument doc new XmlDocument();
XmlElement root doc.CreateElement(Root);
doc.AppendChild(root);2. 加载和解析XML文档
可以使用XmlDocument或XmlReader类来加载和解析XML文档
XmlDocument doc new XmlDocument();
doc.Load(path/to/xml/file.xml);XmlReader reader XmlReader.Create(path/to/xml/file.xml);
while (reader.Read())
{// 处理XML数据
}3. 查询和筛选XML数据
// 使用XPath查询
XmlNodeList nodes doc.SelectNodes(//Book[Price 10]);// 使用LINQ to XML查询
var books from book in doc.Descendants(Book)where (int)book.Element(Price) 10select book;4. 修改和更新XML数据
可以通过修改XmlDocument对象的属性和元素来更新XML数据
XmlElement bookElement doc.CreateElement(Book);
XmlAttribute titleAttribute doc.CreateAttribute(Title);
titleAttribute.Value C# Programming;
bookElement.Attributes.Append(titleAttribute);XmlElement priceElement doc.CreateElement(Price);
priceElement.InnerText 20;
bookElement.AppendChild(priceElement);XmlNode root doc.DocumentElement;
root.AppendChild(bookElement);// 保存修改后的XML文档
doc.Save(path/to/xml/file.xml);二、 XML操作版本2
1. 创建XML
/// summary
/// 创建XML文件
/// /summary
/// param namexmlPath/param
private static void CreateXmlFile(string xmlPath)
{try{//定义一个XDocument结构XDocument myXDoc new XDocument(new XElement(Users,new XElement(User, new XAttribute(ID, 111111),new XElement(name, EricSun),new XElement(password, 123456),new XElement(description, Hello Im from Dalian)),new XElement(User, new XAttribute(ID, 222222),new XElement(name, Ray),new XElement(password, 654321),new XElement(description, Hello Im from Jilin))));//保存此结构即我们预期的xml文件myXDoc.Save(xmlPath);string aa myXDoc.ToString();}catch (Exception ex){Console.WriteLine(ex.ToString());}
}2. 查询和筛选XML数据
获得根节点下name子节点
/// summary
/// 遍历xml信息
/// /summary
/// param namexmlPath/param
private static void GetXmlNodeInformation(string xmlPath)
{try{//定义并从xml文件中加载节点根节点XElement rootNode XElement.Load(xmlPath);//XElement rootNode2 XElement.Parse(xmlPath);//查询语句: 获得根节点下name子节点此时的子节点可以跨层次孙节点、重孙节点......IEnumerableXElement targetNodes from target in rootNode.Descendants(name)select target;foreach (XElement node in targetNodes){Console.WriteLine(name {0}, node.Value);}}catch (Exception ex){Console.WriteLine(ex.ToString());}
}获取ID属性值等于111111并且函数子节点的所有User节点
/// summary
/// 遍历xml信息
/// /summary
/// param namexmlPath/param
private static void GetXmlNodeInformation(string xmlPath)
{try{//定义并从xml文件中加载节点根节点XElement rootNode XElement.Load(xmlPath);//XElement rootNode2 XElement.Parse(xmlPath);//查询语句: 获取ID属性值等于111111并且函数子节点的所有User节点并列条件用符号连接IEnumerableXElement myTargetNodes from myTarget in rootNode.Descendants(User)where myTarget.Attribute(ID).Value.Equals(111111) myTarget.HasElementsselect myTarget;foreach (XElement node in myTargetNodes){Console.WriteLine(name {0}, node.Element(name).Value);Console.WriteLine(password {0}, node.Element(password).Value);Console.WriteLine(description {0}, node.Element(description).Value);}}catch (Exception ex){Console.WriteLine(ex.ToString());}
}3. 修改和更新XML数据
/// summary
/// 修改xml信息
/// /summary
/// param namexmlPath/param
public static void ModifyXmlNodeInformation(string xmlPath)
{try{//定义并从xml文件中加载节点根节点XElement rootNode XElement.Load(xmlPath);//查询语句: 获取ID属性值等于222222或者等于777777的所有User节点或条件用||符号连接IEnumerableXElement targetNodes from target in rootNode.Descendants(User)where target.Attribute(ID).Value 222222|| target.Attribute(ID).Value.Equals(777777)select target;//遍历所获得的目标节点集合foreach (XElement node in targetNodes){//将description节点的InnerText设置为Hello, Im from USA.node.Element(description).SetValue(Hello, Im from USA.);}//保存对xml的更改操作rootNode.Save(xmlPath);}catch (Exception ex){Console.WriteLine(ex.ToString());}
}4. 添加xml信息
/// summary
/// 添加xml信息
/// /summary
/// param namexmlPath/param
private static void AddXmlNodeInformation(string xmlPath)
{try{//定义并从xml文件中加载节点根节点XElement rootNode XElement.Load(xmlPath);//定义一个新节点XElement newNode new XElement(User, new XAttribute(ID, 999999),new XElement(name, Rose),new XElement(password, 456123),new XElement(description, Hello, Im from UK.));//将此新节点添加到根节点下rootNode.Add(newNode);//Add 在 XContainer 的子内容的末尾添加内容。//AddFirst 在 XContainer 的子内容的开头添加内容。//AddAfterSelf 在 XNode 后面添加内容。//AddBeforeSelf 在 XNode 前面添加内容。//保存对xml的更改操作rootNode.Save(xmlPath);}catch (Exception ex){Console.WriteLine(ex.ToString());}
}5. 删除xml信息
/// summary
/// 删除xml信息
/// /summary
/// param namexmlPath/param
private static void DeleteXmlNodeInformation(string xmlPath)
{try{//定义并从xml文件中加载节点根节点XElement rootNode XElement.Load(xmlPath);//查询语句: 获取ID属性值等于999999的所有User节点IEnumerableXElement targetNodes from target in rootNode.Descendants(User)where target.Attribute(ID).Value.Equals(999999)select target;//将获得的节点集合中的每一个节点依次从它相应的父节点中删除targetNodes.Remove();//保存对xml的更改操作rootNode.Save(xmlPath);}catch (Exception ex){Console.WriteLine(ex.ToString());}
}四、XML与实体之间的转换
1. 实体转化为XML
/// summary
/// 实体转化为XML
/// /summary
public static string ParseToXmlT(this T model, string fatherNodeName)
{var xmldoc new XmlDocument();var modelNode xmldoc.CreateElement(fatherNodeName);xmldoc.AppendChild(modelNode);if (model ! null){foreach (PropertyInfo property in model.GetType().GetProperties()){var attribute xmldoc.CreateElement(property.Name);if (property.GetValue(model, null) ! null)attribute.InnerText property.GetValue(model, null).ToString();//else// attribute.InnerText [Null];modelNode.AppendChild(attribute);}}return xmldoc.OuterXml;
}2. XML转换为实体,默认 fatherNodeName“body”
/// summary
/// XML转换为实体,默认 fatherNodeNamebody
/// /summary
/// typeparam nameT/typeparam
/// param namexml/param
/// param namefatherNodeName/param
/// returns/returns
public static T ParseToModelT(this string xml, string fatherNodeName body) where T : class ,new()
{if (string.IsNullOrEmpty(xml))return default(T);var xmldoc new XmlDocument();xmldoc.LoadXml(xml);T model new T();var attributes xmldoc.SelectSingleNode(fatherNodeName).ChildNodes;foreach (XmlNode node in attributes){foreach (var property in model.GetType().GetProperties().Where(property node.Name property.Name)){if (!string.IsNullOrEmpty(node.InnerText)){property.SetValue(model,property.PropertyType typeof(Guid)? new Guid(node.InnerText): Convert.ChangeType(node.InnerText, property.PropertyType));}else{property.SetValue(model, null);}}}return model;
}3. XML转实体
/// summary
/// XML转实体
/// /summary
/// typeparam nameT/typeparam
/// param namexml/param
/// param nameheadtag/param
/// returns/returns
public static ListT XmlToObjListT(this string xml, string headtag) where T : new()
{var list new ListT();XmlDocument doc new XmlDocument();PropertyInfo[] propinfos null;doc.LoadXml(xml);XmlNodeList nodelist doc.SelectNodes(headtag);foreach (XmlNode node in nodelist){T entity new T();if (propinfos null){Type objtype entity.GetType();propinfos objtype.GetProperties();}foreach (PropertyInfo propinfo in propinfos){//实体类字段首字母变成小写的 string name propinfo.Name.Substring(0, 1) propinfo.Name.Substring(1, propinfo.Name.Length - 1);XmlNode cnode node.SelectSingleNode(name);string v cnode.InnerText;if (v ! null)propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);}list.Add(entity);}return list;
}