我想使用Linq从XML元素返回唯一/单个字符串值

时间:2011-03-21 20:58:34

标签: c# .net xml linq-to-xml xelement

我想从以下XML字符串(来自Yahoo地理编码API)返回纬度节点(例如)。

<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查询都返回null。

如果你能用足够的细节来解释它,我就可以获得错误节点。我只提到它,因为它处于不同的水平。

感谢。

赛斯

2 个答案:

答案 0 :(得分:3)

获取纬度值:

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

你可以使用以下内容获取Error元素:

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

我正在使用resultXML作为对已解析XML的引用。

答案 1 :(得分:1)

确保您使用System.Xml.XPath命名空间,然后尝试:

var doc = XDocument.Parse(<your xml here>);
var el = doc.XPathSelectElement("ResultSet/Result/latitude");
如果找不到该节点,

el应包含XElement类或null

有关如何使用它的更多信息,请参阅MSDN docsXPath 1.0