C# C语言中的XML解析异常#
我在解析XML文档中的一个特定值时遇到了一些问题。我使用的代码如下所示:C# C语言中的XML解析异常#,c#,.net,xml,visual-studio,webrequest,C#,.net,Xml,Visual Studio,Webrequest,我在解析XML文档中的一个特定值时遇到了一些问题。我使用的代码如下所示: WebResponse response = request.GetResponse(); Stream responseStream = response.GetResponseStream(); XDocument doc = XDocument.Load(responseStream); XElement root = doc.Root; ClassVars.LastTimeStamp = (int)root.Ele
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
XDocument doc = XDocument.Load(responseStream);
XElement root = doc.Root;
ClassVars.LastTimeStamp = (int)root.Elements("TIMESTAMP").Last();
但是,此代码正在生成以下异常:
“System.InvalidOperationException”类型的未处理异常
发生在System.Core.dll中
(完整的错误消息如下所示。)
坦率地说,我一辈子都不明白为什么。它出错的行是ClassVars.LastTimeStamp=(int)root.Elements(“TIMESTAMP”).Last()代码>行。我试图从以下XML解析此内容:
<REGION>
<MESSAGES>
<POST>
<TIMESTAMP>1439137652</TIMESTAMP>
<NATION>...</NATION>
<MESSAGE>
</MESSAGE>
</POST>
...
...
...
<POST>
<TIMESTAMP>1439137856</TIMESTAMP>
<NATION>...</NATION>
<MESSAGE>
...
</MESSAGE>
</POST>
</MESSAGES>
</REGION>
1439137652
...
...
...
...
1439137856
...
...
我想做的是从文件中的最后一篇文章中提取时间戳。有人能告诉我我做错了什么吗?这可能是非常明显的,但我就是看不到。问题是您使用了错误的方法来检索
元素。仅返回子元素。在您的例子中,
有三层,因此您需要使用
问题是您使用了错误的方法来检索
元素。仅返回子元素。在您的例子中,
有三层,因此您需要使用
假设这是整个文档(头除外),REGION是root的唯一元素。
尝试改用子体。假设这是整个文档(除了标题),REGION是root的唯一元素。
尝试改用后代。你能粘贴错误消息吗?@Douglas:评论太长了,请看@TaW我太笨了,很抱歉!我还在WebRequest中使用测试密钥。谢谢你让我意识到呵呵!你能粘贴错误信息吗?@Douglas:评论太长了,请看@TaW我太笨了,太抱歉了!我还在WebRequest中使用测试密钥。谢谢你让我意识到呵呵!我认为一个更好的选择是学习并给出通向子元素的路径。这是一个更稳定的解决方案。@GreĝRos:我同意这将是更好的纪律,特别是如果路径验证很重要的话。另一方面,OP可能不关心确切的XML结构,希望代码在结构改变时仍能工作。@Douglas是正确的-我使用的API确实改变了公平的交易,我并不真正关心结构——我只需要在代码中将这一位解析为变量。我认为更好的选择是学习并给出子元素的路径。这是一个更稳定的解决方案。@GreĝRos:我同意这将是更好的纪律,特别是如果路径验证很重要的话。另一方面,OP可能不关心确切的XML结构,希望代码在结构改变时仍能工作。@Douglas是正确的-我使用的API确实改变了很多,我并不真正关心结构-我只需要在代码中将这一位作为变量进行解析。
ClassVars.LastTimeStamp = (int)root.Descendants("TIMESTAMP").Last();