a.xml
<n>
<user>
    <name>a1</name>
    <qq>0</qq>
  </user>
  <user>
    <name>a2</name>
    <qq>0</qq>
  </user>
</n>
后台
XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlpath);
XmlNodeList nodeList = xmlDoc.SelectSingleNode("n//user").ChildNodes;//问题出在这里它只能循环两次因为user下只有两个子节要改成xmlDoc.SelectSingleNode("n")            //遍历所有子节点
            foreach (XmlNode xn in nodeList)
            {
                //将子节点类型转换为XmlElement类型
                XmlElement xe = xn as XmlElement;
                if (xe.Name == "name")
                {
                    if (xe.InnerText.Trim() == "a1")
                    {
                        //确认qq节点近跟在name节点之后
                        (xe.NextSibling as XmlElement).InnerText = "123456";
                    }
                }
            }
            xmlDoc.Save(xmlpath);问题是只能循环两次因为user下只有两个子节.要改成xmlDoc.SelectSingleNode("n")
但这就访问不到name了,不知如何做,请高手指教,我是菜liao

解决方案 »

  1.   

    可以使用遍历啊,只要判断一个节点有没有子节点就OK了,如果有(HasChild),读取子节点并遍历子节点,否则读取相邻节点(NextNode)
      

  2.   

    没法子,重新注一个号来顶啊,现在csdn人好象少了很多,这可不行啊
      

  3.   

     XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(xmlpath);            XmlNodeList nodeList = xmlDoc.SelectSingleNode("n").ChildNodes;
                XmlNodeList nodeList1 = xmlDoc.SelectSingleNode("n//user").ChildNodes;
                //遍历所有子节点
                foreach (XmlNode xn in nodeList)
                {                foreach (XmlNode xn1 in nodeList1)
                    {
                        //将子节点类型转换为XmlElement类型
                        XmlElement xe = xn1 as XmlElement;                    if (xe.Name == "name")
                        {
                            if (xe.InnerText.Trim() == "a1")
                            {
                                //确认qq节点近跟在name节点之后
                                (xe.NextSibling as XmlElement).InnerText = "123456";
                            }
                        }
                    }
                }
    如果是a1可运行成功,如果是a2,a3的就改不了,也不提示.
      

  4.   

    老大啊,不会吧,都是我一个人再说啊,csdn怎么了,
    现在我测了一下,xe.InnerText.Trim()的循环值都是a1 ,
      

  5.   

    XmlNode xn1 in nodeList1问题就在这里,每次重新开始,不知如何改在循环外
      

  6.   

    噢,我就是想修改<name>同一节的qq

    <user> 
        <name>a2 </name> 
        <qq>0 </qq> 
      </user>
    改为
    <user> 
        <name>a2 </name> 
        <qq>123456 </qq> 
      </user>
      

  7.   

    高歌,你好.我这源码还是你提供的,谢谢你了.现在是不管有多少个子节,只能循环两次,原因我找到了,
    XmlNodeList nodeList1 = xmlDoc.SelectSingleNode("n//user").ChildNodes;//因为user下只有两个子节.现在我不知如何?
      

  8.   

    用不着吧
    直接获取所有的user节点
    然后再循环判断user的子节点就可以了啊
      

  9.   

    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load(xmlpath); 
    xmlDoc.SelectSingleNode("//user[name='a1']/qq").InnerText = "55555";
    xmlDoc.Save(xmlpath);
      

  10.   

    xie_yanke
    真是高人,困我两天加一夜.谢谢了