Я хочу вернуть единственное / единственное строковое значение из элемента XML с помощью Linq - PullRequest
0 голосов
/ 21 марта 2011

Я хочу вернуть узел широты (например) из следующей строки XML (из API геокодирования Yahoo.)

<ResultSet version="1.0">
  <Error>0</Error>
  <ErrorMessage>No error</ErrorMessage>
  <Locale>us_US</Locale>
  <Quality>60</Quality>
  <Found>1</Found>
  <Result>
    <quality>87</quality>
    <latitude>37.68746446</latitude>
    <longitude>-79.6469878</longitude>
    <offsetlat>30.895931</offsetlat>
    <offsetlon>-80.281192</offsetlon>
    <radius>500</radius>
    <name></name>
    <line1>123 Main Street</line1>
    <line2>Greenville, SC  29687</line2>
    <line3></line3>
    <line4>United States</line4>
    <house>123</house>
    <street>Main Street</street>
    <xstreet></xstreet>
    <unittype></unittype>
    <unit></unit>
    <postal>29687</postal>
    <neighborhood></neighborhood>
    <city>Greenville</city>
    <county>Greenville County</county>
    <state>South Carolina</state>
    <country>United States</country>
    <countrycode>US</countrycode>
    <statecode>SC</statecode>
    <countycode></countycode>
    <uzip>29687</uzip>
    <hash>asdfsdfas</hash>
    <woeid>127757446454</woeid>
    <woetype>11</woetype>
  </Result>
</ResultSet>

У меня уже есть этот XML, успешно загруженный в экземпляр XElement, но я не могу показатьсячтобы можно было найти способ загрузки узла широты (например) в строковую переменную.Если нет узла или узел пуст, то я хотел бы получить Null или Nullstring.Если их больше одного (не будет, но на всякий случай), верните первый экземпляр.

Я думал, что это будет легко, но я не могу заставить его работать.Все запросы Linq, которые я пробовал, возвращают ноль.

Пока я в этом, если бы вы могли объяснить это достаточно подробно, чтобы я мог также получить узел Error.Я упоминаю об этом только потому, что это на другом уровне.

Спасибо.

Сет

Ответы [ 2 ]

3 голосов
/ 22 марта 2011

Чтобы получить значение широты:

var latitudeElement = resultXML.Descendants("latitude").FirstOrDefault();
string latitude = latitudeElement == null ? String.Empty : latitudeElement.Value;

И вы можете получить элемент Error со следующим:

var errorElement = resultXML.Descendants("Error").First();

Я использую resultXML в качестве ссылки на проанализированный XML.

1 голос
/ 22 марта 2011

Убедитесь, что вы используете пространство имен System.Xml.XPath, и попробуйте:

var doc = XDocument.Parse(<your xml here>);
var el = doc.XPathSelectElement("ResultSet/Result/latitude");

el должен содержать класс XElement или null, если узел не найден.

См. MSDN документы для XPath 1.0 для получения дополнительной информации о том, как его использовать.

...