C# 对XML的 创建、查询

假设一个xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?> 
<Persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.xxx.com/XxxSystem"> 
  <Person id="1"> 
    <Name>张三</Name> 
    <Age>18</Age> 
  </Person> 
  <Person id="2"> 
    <Name>李四</Name> 
    <Age>20</Age> 
  </Person> 
</Persons>  

创建xml代码如下:

private void button1_Click(object sender, EventArgs e) 
       { 
           XmlDocument doc = new XmlDocument(); 
           XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 
           doc.AppendChild(dec); 
           //根节点 
           XmlElement root = doc.CreateElement("Persons"); 
           doc.AppendChild(root); 
           root.AddEleAttr(doc, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
           root.AddEleAttr(doc, "xmlns", "http://www.xxx.com/XxxSystem"); 
           //根节点的每个独立子节点 
           XmlElement body = doc.CreateElement("Person"); 
           body.AddEleAttr(doc, "id", "1");    
           body.AddChildNode(doc, "Name", "张三"); 
           body.AddChildNode(doc, "Age", "18");     
           root.AppendChild(body); 
   
           //根节点的每个独立子节点 
           body = doc.CreateElement("Person"); 
           body.AddEleAttr(doc, "id", "2"); 
           body.AddChildNode(doc, "Name", "李四"); 
           body.AddChildNode(doc, "Age", "20");            
           root.AppendChild(body); 
   
           doc.Save("person.xml"); 
       }  

查询id=2时的姓名和年龄

private void button2_Click(object sender, EventArgs e) 
       { 
            XmlDocument doc = new XmlDocument(); 
            using (StreamReader sr = new StreamReader("person.xml", Encoding.UTF8)) 
            { 
                doc.Load(sr); 
                XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable); 
                nsMgr.AddNamespace("ns", "http://www.xxx.com/XxxSystem"); 
                XmlNodeList nodes = doc.SelectNodes("//ns:Person[@id=2]", nsMgr); 
                foreach (XmlNode item in nodes) 
                { 
                    string name = item.SelectSingleNode("//ns:Name", nsMgr).InnerText; 
                    string age = item.SelectSingleNode("//ns:Age", nsMgr).InnerText; 
                    MessageBox.Show(string.Format("{0}:{1}", name, age)); 
                } 
            } 
       }   

注:上面创建xml用到的两个扩展方法如下:

/// <summary> 
/// XML元素添加属性 
/// </summary> 
public static void AddEleAttr(this XmlElement src, XmlDocument doc, string name, string value) 
{ 
    XmlAttribute attr = doc.CreateAttribute(name); 
    attr.Value = value; 
    src.Attributes.Append(attr); 
} 
/// <summary> 
/// XML元素添加子节点 
/// </summary> 
public static void AddChildNode(this XmlElement src, XmlDocument doc, string name, string innerText) 
{ 
    XmlElement elem = doc.CreateElement(name); 
    elem.InnerText = innerText; 
    src.AppendChild(elem); 
}  

 

posted @ 2013-02-13 20:09  Tony.J  阅读(392)  评论(0编辑  收藏  举报