2009-12-17 3 views
0

При запуске следующего кода StatusCode возвращается как null. Что я делаю неправильно?Проблема 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

Вы можете видеть, глядя на синтаксис, окрашивающий btw, что локальные переменные CamelCasing довольно нестандартны. «Xml» pascalCased выглядит лучше, просто мысль :) –

+0

Я считаю, что у вас есть camelCasing и PascalCasing назад. –

ответ

3

Вам также необходимо предоставить пространство имен элементам далее, поскольку они также находятся в пространстве имен.

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

Спасибо! Работает как шарм. – bytez

Смежные вопросы