【发布时间】:2018-07-24 12:41:54
【问题描述】:
多年来,我一直通过 API 访问数据库,今天进行了更改,但我无法联系所有者。这似乎是一个微妙的变化,导致我的代码给出了空引用异常。
下载了一个文件,然后我尝试使用 XmlReader 并使用以下代码将其加载到字典中:
Dictionary<decimal, string> dict = new Dictionary<decimal, string>();
using (var file = File.Open(dir + @"\dxcc_matrix.gz", FileMode.Open))
{
using (var zip = new GZipStream(file, CompressionMode.Decompress))
{
using (var xmlReader = XmlReader.Create(zip))
{
var xd = XDocument.Load(xmlReader);
dict = //error occurs here
xd
.Document
.Root
.Element(XName.Get("entities", "http://www.clublog.org/cty/v1.0"))
.Elements(XName.Get("entity", "http://www.clublog.org/cty/v1.0"))
.ToDictionary(
x => (decimal)x.Element(XName.Get("adif", "http://www.clublog.org/cty/v1.0")),
x => x.Element(XName.Get("name", "http://www.clublog.org/cty/v1.0")).Value);
}
}
}
部分 XML 文件如下所示:
<clublog date="2018-02-13T21:30:11+00:00"
xmlns="https://clublog.org/cty/v1.0">
<entities>
<entity>
<adif>1</adif>
<name>CANADA</name>
<prefix>VE</prefix>
<deleted>FALSE</deleted>
<cqz>5</cqz>
<cont>NA</cont>
<long>-80.00</long>
<lat>45.00</lat>
</entity>
<entity>
<adif>2</adif>
<name>ABU AIL IS</name>
<prefix>A1</prefix>
<deleted>TRUE</deleted>
<cqz>21</cqz>
<cont>AS</cont>
<long>45.00</long>
<lat>12.80</lat>
<end>1991-03-30T23:59:59+00:00</end>
</entity>
<!--Additional entities omitted-->
</entities>
</clublog>
我的代码是否突然出现问题,或者 XML 无法与当前代码一起使用?
【问题讨论】:
-
哪一行抛出异常?
-
首先我注意到结束标签
</entities>丢失了。如果您只是忘记将其粘贴到此处.. 更改的确切位置在哪里?在解析 XML 文件时,如果某些元素找不到,则会抛出 null 异常。 -
http://www.clublog.org/cty/v1.0给出 404 not found 所以我想这可能是问题的一部分
标签: c# linq-to-xml xmlreader