假设我有xml
pic.xml:
<?xml version="1.0" encoding="utf-8"?>
<imgdata>
<img picpath="中国">
<clickurl>1</clickurl> 
</img>
<img picpath="日本">
<clickurl>2</clickurl> 
</img>
<img picpath="美国">
<clickurl>3</clickurl> 
</img>
</imgdata>我要读取他的clickurl该怎么读?
public void readXmla()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("pic.xml");            XmlNodeList elemList = doc.GetElementsByTagName("img");            foreach (XmlNode xn in elemList)//遍历所有子节点
            {
                XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                Console.WriteLine("name=" + xe.GetAttribute("picpath"));//在这里只能把picpath当做属性拿出来,但是无法得到clickurl
              //假设我要在这里做判断,由picpath得到他对应的clickurl该怎么做?
              if(xe.GetAttribute("picpath")=="中国")
              {
               //我在这里想拿到 clickurl的值
              }
            }
        }

解决方案 »

  1.   

    可以在 if里边 用xe.InnerText得到中国对应的 1
    但是我不想这样
    我希望能通过 clickurl 得到
      

  2.   

     不希望这样拿到
    因为假设我有
    <clickurl1> 1 </clickurl1>   
    <clickurl2> 2 </clickurl2>   
    <clickurl3> 3</clickurl3> 

    所以我希望从名字拿到,这样不管多少个我都能确定了  
      

  3.   

    System.Xml.XmlDocument document = new System.Xml.XmlDocument();         
                document.InnerXml = @"<?xml version="1.0" encoding="utf-8"?> 
    <imgdata> 
    <img picpath="中国"> 
    <clickurl> 1 </clickurl>   
    </img> 
    <img picpath="日本"> 
    <clickurl> 2 </clickurl>   
    </img> 
    <img picpath="美国"> 
    <clickurl> 3 </clickurl>   
    </img> 
    </imgdata> 
    ";
                System.Xml.XmlNodeList nl = document.SelectNodes(@"//clickurl");
                foreach (System.Xml.XmlNode n in nl)
                {
                    Console.WriteLine(n.InnerText);
                }
      

  4.   


    System.Xml.XmlDocument document = new System.Xml.XmlDocument();          
                document.InnerXml = @" <imgdata>   
    <img picpath=""中国"">   
    <clickurl>  1  </clickurl>     
    </img>   
    <img picpath=""日本"">   
    <clickurl>  2  </clickurl>     
    </img>   
    <img picpath=""美国"">   
    <clickurl>  3  </clickurl>     
    </img>   
    </imgdata>   
    "; 
                //如果要按属性选择国家
                //System.Xml.XmlNodeList nl = document.SelectNodes(@"//img[@picpath=""中国""]/clickurl");            //如果全部输出
                System.Xml.XmlNodeList nl = document.SelectNodes(@"//clickurl"); 
                foreach (System.Xml.XmlNode n in nl) 
                { 
                    Console.WriteLine(n.InnerText); 
                } 
      

  5.   

    我是希望通过 遍历  img 里 picpath的值而得到对应的子节点属性
    而不是单独把clickurl拿出来...
    我要得到假设中国的时候,从中国里面的到下面子节点
    比如
    <img picpath="中国">   
    <clickurl>  1  </clickurl>     
    <name> zg</name>
    </img>   
    我希望的到picpath的时候能方便拿到下面的clickurl或者name通过这个名字
      

  6.   


    System.Xml.XmlDocument document = new System.Xml.XmlDocument();          
                document.InnerXml = @" <imgdata>   
    <img picpath=""中国"">   
    <clickurl>  1  </clickurl>     
    </img>   
    <img picpath=""日本"">   
    <clickurl>  2  </clickurl>     
    </img>   
    <img picpath=""美国"">   
    <clickurl>  3  </clickurl>     
    </img>   
    </imgdata>   
    "; 
                   System.Xml.XmlNodeList nl = document.SelectNodes(@"//clickurl");           
                foreach (System.Xml.XmlNode n in nl) 
                {
                    Console.WriteLine(n.ParentNode.Attributes["picpath"].Value);
                    Console.WriteLine(n.InnerText); 
                } 
      

  7.   

           public void readXmla()
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(@"D:\project\zhangbotest\WindowsApplication1\WindowsApplication1\aa.xml");            XmlNodeList elemList = doc.SelectNodes("//imgdata//img[@picpath='aa']");
                foreach (XmlElement e in elemList)
                {
                    //e.InnerText;
                }
              
                
            }
      

  8.   


          public void readXmla() 
            { 
                XmlDocument doc = new XmlDocument(); 
                doc.Load(@"D:\project\zhangbotest\WindowsApplication1\WindowsApplication1\aa.xml");             XmlNodeList elemList = doc.SelectNodes("//imgdata//img[@picpath='中国']"); 
                foreach (XmlElement e in elemList) 
                { 
                    e["name"];
    e["clickurl"];
                } 
               
                 
            }
      

  9.   

      public void readXmla()  
            {  
                XmlDocument doc = new XmlDocument();  
                doc.Load(@"D:\project\zhangbotest\WindowsApplication1\WindowsApplication1\aa.xml");              XmlNodeList elemList = doc.SelectNodes("//imgdata//img[@picpath='中国']");  
                foreach (XmlElement e in elemList)  
                {  
                    e["name"]; 
    e["clickurl"]; 
                }  
                
                  
            }
    正解..可以直接从e["name"]; 拿值,我汗...想复杂了,
    也谢谢各位,我同时也得到了不少启发,谢谢!