• C#xml读取节点数据方法


    C#读取xml节点数据方法小结

    本文实例总结了C#读取xml节点数据的方法。分享给大家供大家参考。具体如下:

    第一种:
    使用XPath
    XML的路径我配置在web.config 的appSettings节点下

    <appSettings>
      <add key="orgCodePath" value="../../template/home/orgCode.xml"/>
    </appSettings>

    XML结构如下:

    <?xml version="1.0" encoding="utf-8" ?> 
    <Organizations> 
     <Organization> 
      <ID>1111</ID> 
      <DomainName>aa</DomainName> 
     </Organization> 
     <Organization> 
      <ID>2222</ID> 
      <DomainName>bb</DomainName> 
     </Organization> 
    </Organizations>

    在C#中,我使用HashTable来进行存储:

    Hashtable ht = new Hashtable(); 
    string orgCodePath = Server.MapPath(ConfigurationSettings.AppSettings["orgCodePath"]);
    //string orgCodePath = Server.MapPath("../../template/home/orgCode.xml");
    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load(orgCodePath);
    //获取节点列表 
    XmlNodeList topM = xmldoc.SelectNodes("//Organization"); 
    foreach (XmlElement element in topM) { 
        string id = element.GetElementsByTagName("ID")[0].InnerText; 
        string domainName = element.GetElementsByTagName("DomainName")[0].InnerText; 
        ht.Add(id, domainName); 
    }

    第二种:

    遍历式读取XML

    //打开某文件(假设web.config在根目录中) 
    string filename=Server.MapPath("/") + @"WebApplication1/web.config"; 
    XmlDocument xmldoc= new XmlDocument(); 
    xmldoc.Load(filename); 
    //得到顶层节点列表 
    XmlNodeList topM=xmldoc.DocumentElement.ChildNodes; 
    foreach(XmlElement element in topM) { 
       if(element.Name.ToLower()=="appsettings") { 
       //得到该节点的子节点 
       XmlNodeList nodelist=element.ChildNodes; 
       if ( nodelist.Count >0 ) { 
            //DropDownList1.Items.Clear(); 
            foreach(XmlElement el in nodelist)//读元素值 { 
            //DropDownList1.Items.Add(el.Attributes["key"].InnerXml); 
            //this.TextBox2.Text=el.Attributes["key"].InnerText; 
            this.TextBox2.Text=el.Attributes["key"].Value; 
            this.Label1.Text=el.Attributes["value"].Value; 
            //同样在这里可以修改元素值,在后面save。 
            // el.Attributes["value"].Value=this.TextBox2.Text; 
        } 
       } 
      } 
    } 
    xmldoc.Save(filename); 

    在某节点下增加一个元素,并设置值: 

    if(element.Name.ToLower()=="appsettings") { 
       XmlElement elem =xmldoc.CreateElement("add");
       element.AppendChild(elem); 
       elem.InnerText="ltp"; 
       xmldoc.Save(filename); 
    }

    效果:

    <appSettings> 
      <add key="密码" value="admin" /> 
      <add>ltp</add> 
    </appSettings>

    在某节点下增加一个元素,并增加两个属性:

    if(element.Name.ToLower()=="appsettings") 
    { 
       XmlElement elem =xmldoc.CreateElement("add"); 
       element.AppendChild(elem); 
       XmlAttribute xa=xmldoc.CreateAttribute("key"); 
       xa.Value="ltp"; 
       XmlAttribute xa2=xmldoc.CreateAttribute("value"); 
       xa2.Value="first"; 
       elem.SetAttributeNode(xa); 
       elem.SetAttributeNode(xa2); 
       xmldoc.Save(filename); 
    }

    效果:

    <appSettings> 
      <add key="密码" value="admin" /> 
      <add key="ltp" value="first" /> 
    </appSettings> 

    添加空元素:

    XmlNode node=doc.CreateElement(groupname); 
    node.InnerText=""; 
    doc.LastChild.AppendChild(node); 
    doc.Save(xmlfile); 

    删除一个节点元素:

    string itemname=this.listBox1.SelectedItem.ToString(); 
    this.listBox1.Items.Remove(this.listBox1.SelectedItem); 
    //begin del xmlfile 
    XmlDocument doc=new XmlDocument(); 
    doc.Load(xmlfile); 
    XmlNodeList topM=doc.DocumentElement.ChildNodes; 
    foreach(XmlElement element in topM) 
    { 
      if(element.Name==this.comboBox1.Text) 
      { 
       //得到该节点的子节点 
       XmlNodeList nodelist=element.ChildNodes;    
       foreach(XmlElement el in nodelist)//读元素值 
       {     
       if(el.Attributes["key"].Value==itemname) 
       { 
        element.RemoveChild(el); 
       } 
       }//循环元素 
      }//得到组 
    }//循环组 
    doc.Save(xmlfile); //一定要保存一下,否则不起作用 
    //筛选数据 
    private void Reader_Xml(string pathFlie) 
    { 
      XmlDocument Xmldoc=new XmlDocument(); 
      Xmldoc.Load(pathFlie); 
      XmlNodeList Record1=Xmldoc.DocumentElement.SelectNodes(Code[@id='1']);
      int f=0; 
      foreach(XmlNode xnode in Record1) 
      { 
      } 
    }

    读取xml数据,  两种xml方式

    <aaa> 
       <bb>something</bb> 
       <cc>something</cc> 
    </aaa> 
    <aaa> 
      <add key="123" value="321"/> 
    </aaa> 

    第一种方法:

    DS.ReadXml("your xmlfile name"); 
    Container.DataItem("bb"); 
    Container.DataItem("cc"); 
    DS.ReadXmlSchema("your xmlfile name"); 

    第二种方法:

    <aaa>
      <add key="123" value="321"/>
    </aaa>

    如果我要找到123然后取到321应该怎么写呢?  

    using System.XML; 
    XmlDataDocument xmlDoc = new System.Xml.XmlDataDocument(); 
    xmlDoc.Load(@"c:/Config.xml"); 
    XmlElement elem = xmlDoc.GetElementById("add"); 
    string str = elem.Attributes["value"].Value 

    第三种方法:  SelectSingleNode  读取两种格式的xml :

    <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
      <appSettings> 
        <ConnectionString>Data Source=yf; user id=ctm_dbo;password=123</ConnectionString>        
     </appSettings> 
    </configuration> 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(strXmlName); 
    XmlNode node=doc.SelectSingleNode("/configuration/appSettings/ConnectionString"); 
    if(node!=null) 
    { 
       string k1=node.Value;  //null 
       string k2=node.InnerText;//Data Source=yf; user id=ctm_dbo;password=123 
       string k3=node.InnerXml;//Data Source=yf; user id=ctm_dbo;password=123 
       node=null; 
    }
    <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
      <appSettings> 
        <add key="ConnectionString" value="Data Source=yf; user id=ctm_dbo;password=123" />        
     </appSettings> 
    </configuration> 
    XmlNode node=doc.SelectSingleNode("/configuration/appSettings/add"); 
    if(node!=null){ 
       string k=node.Attributes["key"].Value; 
       string v=node.Attributes["value"].Value; 
       node=null; 
    } 
    XmlNode node=doc.SelectSingleNode("/configuration/appSettings/add"); 
    if(node!=null) {
       XmlNodeReader nr=new XmlNodeReader(node); 
       nr.MoveToContent(); 
      //检查当前节点是否是内容节点。如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。 
       nr.MoveToAttribute("value"); 
       string s=nr.Value; 
       node=null; 
    }
     
  • 相关阅读:
    【解决】Word 在试图打开文件时遇到错误 请尝试下列方法:* xxx * xxx * xxx
    【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
    [经验]无线鼠标和无线键盘真的不能用了?——雷柏的重生之路~
    Git技巧:右键菜单怎么去除?
    07.GitHub实战系列~7.Git之VS2013团队开发(如果不想了解git命令直接学这篇即可)
    Git异常:fatal: V1.0 cannot be resolved to branch.
    06.GitHub实战系列~6.过滤器过滤掉的文件如何上传
    Git异常:Cannot delete the branch 'test1' which you are currently on
    ElasticSearch查询 第四篇:匹配查询(Match)
    字符串的长度,是字符数量,还是字节数量?
  • 原文地址:https://www.cnblogs.com/grj001/p/12224171.html
Copyright © 2020-2023  润新知