2009-12-17 77 views
0

當您運行以下代碼時,StatusCode返回爲空。 我在做什麼錯?C#XPath問題

 var xml = @"<?xml version='1.0' encoding='UTF-8'?> 
      <kml xmlns='http://earth.google.com/kml/2.0'> 
       <Response> 
       <name>The Name</name> 
       <Status> 
        <code>200</code> 
        <request>geocode</request> 
       </Status> 
       </Response> 
      </kml>"; 

     XmlDocument XmlDoc = new XmlDocument(); 
     ASCIIEncoding Enc = new System.Text.ASCIIEncoding(); 
     using (MemoryStream Stream = new MemoryStream(Enc.GetBytes(xml))) 
     { 
      XmlDoc.Load(Stream); 
     } 
     XmlElement Root = XmlDoc.DocumentElement; 
     XmlNamespaceManager XmlNS = new XmlNamespaceManager(XmlDoc.NameTable); 
     XmlNS.AddNamespace("default", Root.NamespaceURI); 
     XmlNode XmlResults = Root.SelectSingleNode("//default:Response", XmlNS); 
     XmlNode StatusCode = XmlResults.SelectSingleNode("Status/code"); 

在此先感謝!

+0

您可以通過查看着色順序的語法來看到CamelCasing局部變量非常不標準。 pascalCased「xml」看起來更好,只是一個想法:) – 2009-12-17 18:59:34

+0

我相信你有你的camelCasing和PascalCasing倒退。 – 2009-12-17 19:12:31

回答

3

您還需要將命名空間提供給更進一步的元素,因爲它們也位於命名空間中。

XmlNode xmlResults = Root.SelectSingleNode("//default:Response", xmlNS); 
XmlNode statusCode = XmlResults.SelectSingleNode("default:Status/default:code", 
    xmlNS); 
+0

謝謝! 工程就像一個魅力。 – bytez 2009-12-17 21:45:07