使用LINQ从XML元素获取属性时遇到问题

时间:2014-05-27 22:02:42

标签: c# xml linq

因此,我正在从第三方API返回的某些XML中解析出属性和值,并且我得到了不一致的结果。 XML看起来像这样:

<propertyMetrics month="12" year="2013" propertyId="3923837">
  <metric name="siteTotal" uom="kBtu" dataType="numeric">
    <value>409249.0</value>
  </metric>
  <metric name="waterUseTotal" uom="kgal" dataType="numeric">
    <value>2434.2</value>
  </metric>
  <metric name="totalGHGEmissions" uom="MtCO2e" dataType="numeric">
    <value>28.5</value>
  </metric>
  <metric name="greenPowerOnSite" dataType="numeric">
    <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
  </metric>
</propertyMetrics>

我在LINQPad中使用以下代码来查询XML:

var propMetrics = doc.Descendants("metric").Attributes();

LINQpad的输出如下:

IEnumerable<XAttribute> (11 items) 
name="siteTotal" 
dataType="numeric" 
name="waterUseTotal" 
dataType="numeric" 
name="totalGHGEmissions" 
uom="MtCO2e" 
dataType="numeric" 
name="greenPowerOnSite" 
dataType="numeric" 

正如您所看到的,它没有捕获所有属性,最值得注意的是它只有一个uom属性。有谁知道为什么会发生这种情况?谢谢!

1 个答案:

答案 0 :(得分:1)

我刚使用LINQPad并使用以下方法获得了正确的结果:

propMetrics.Descendants("metric").Attributes()

我认为唯一可能发生的事情是从第三方API返回的字符串中的一些编码问题。尝试将xml从您的问题复制到LINQPad并进行测试以确认这一点。