2009-12-17 76 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