2010-05-17 4 views
0

Мой XML выглядит следующим образом:Как получить информацию о местоположении в XML с помощью linq?

<kml xmlns="http://earth.google.com/kml/2.0"> 
    <Response> 
    <name>90210</name> 
    <Status> 
     <code>200</code> 
     <request>geocode</request> 
    </Status> 
    <Placemark id="p1"> 
     <address>Beverly Hills, CA 90210, USA</address> 
     <AddressDetails Accuracy="5" 
     xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"> 
     <Country> 
      <CountryNameCode>US</CountryNameCode> 
      <CountryName>USA</CountryName> 
      <AdministrativeArea> 
      <AdministrativeAreaName>CA</AdministrativeAreaName> 
      <SubAdministrativeArea> 
       <SubAdministrativeAreaName>Los 
       Angeles</SubAdministrativeAreaName> 
       <Locality> 
       <LocalityName>Beverly Hills</LocalityName> 
       <PostalCode> 
        <PostalCodeNumber>90210</PostalCodeNumber> 
       </PostalCode> 
       </Locality> 
      </SubAdministrativeArea> 
      </AdministrativeArea></Country> 
      </AddressDetails> 
      <ExtendedData> 
      <LatLonBox north="34.1377559" south="34.0642330" 
       east="-118.3896720" west="-118.4467160" /> 
      </ExtendedData> 
      <Point> 
      <coordinates>-118.4104684,34.1030032,0</coordinates> 
      </Point> 
    </Placemark> 
    </Response> 
</kml> 

мне нужна информация в расширенных данных, т.е. значения север/юг, восток/запад.

+0

Хорошо. Как далеко вы достигли, когда пытались его реализовать? –

+0

с использованием System.linq; – Blankman

+0

Очень смешно. Вернитесь после того, как попробуете. –

ответ

3

Вы также можете развернуть все узлы. Но это, вероятно, самый простой способ получить элемент LatLonBox.

var xml = XElement.Parse(xmlString); 
var ns = "{http://earth.google.com/kml/2.0}"; 
var extendedData = xml.Descendants(ns + "LatLonBox").First(); 

var locationBox = new 
{ 
    North = float.Parse(extendedData.Attribute("north").Value), 
    South = float.Parse(extendedData.Attribute("south").Value), 
    East = float.Parse(extendedData.Attribute("east").Value), 
    West = float.Parse(extendedData.Attribute("west").Value), 
}; 

... детализировать элементы, которые вы можете сделать это ...

var extendedData = xml.Element(ns + "Response") 
         .Element(ns + "Placemark") 
         .Element(ns + "ExtendedData") 
         .Element(ns + "LatLonBox"); 
+0

Пространства имен xml могут быть довольно грязными. Использование 'ns +', как я сделал выше, значительно упрощает беспорядок. –

+0

благодарит allot, так что вы также используете анонимный класс? – Blankman

+0

для 'locationBox' да. вы можете заменить это на определение класса или разделить на 4 переменные, если хотите. Если вы пытались обработать набор элементов, вы также можете поместить их в свою инструкцию LINQ. –

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