Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ从XML元素获取属性时遇到问题_C#_Xml_Linq - Fatal编程技术网

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

C# 使用LINQ从XML元素获取属性时遇到问题,c#,xml,linq,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

因此,我从第三方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>
IEnumerable<XAttribute> (11 items) 
name="siteTotal" 
dataType="numeric" 
name="waterUseTotal" 
dataType="numeric" 
name="totalGHGEmissions" 
uom="MtCO2e" 
dataType="numeric" 
name="greenPowerOnSite" 
dataType="numeric" 
LINQpad的输出如下所示:

<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>
IEnumerable<XAttribute> (11 items) 
name="siteTotal" 
dataType="numeric" 
name="waterUseTotal" 
dataType="numeric" 
name="totalGHGEmissions" 
uom="MtCO2e" 
dataType="numeric" 
name="greenPowerOnSite" 
dataType="numeric" 
IEnumerable(11项)
name=“siteTotal”
dataType=“numeric”
name=“WaterUseTottal”
dataType=“numeric”
name=“totalGHGEmissions”
uom=“MtCO2e”
dataType=“numeric”
name=“greenPowerOnSite”
dataType=“numeric”

正如您所看到的,它没有捕获所有属性,最明显的是它只有一个uom属性。有人知道为什么会这样吗?谢谢

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

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

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

您可以使用更改编码。但即使是这样,您也需要知道字符串的编码是什么。使用一些编码找出字符串使用的编码,并将其转换为UTF8或UTF16。我认为这应该可以解决问题。响应头说编码是UTF8,这是否意味着我需要转换为UTF16?嗯……不太可能。我非常肯定.Net能够很好地处理UTF-8。这需要更多的检查。你需要检查并找到冒犯的角色。我建议你为这个问题提出一个新问题。应该有一些工具来帮助实现这一点。代码实际上在Visual Studio中运行良好,只有LINQpad有问题,所以可能存在错误。