XML 在 C# 中解析异常
XML parsing exception in C#
我在解析 XML 文档中的一个特定值时遇到一点问题。我使用的代码如下:
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
XDocument doc = XDocument.Load(responseStream);
XElement root = doc.Root;
ClassVars.LastTimeStamp = (int)root.Elements("TIMESTAMP").Last();
但是,此代码生成以下异常:
An unhandled exception of type 'System.InvalidOperationException'
occurred in System.Core.dll
(完整的错误信息是 here。)
坦率地说,我这辈子都想不通为什么。它出错的行是 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>
我想要做的是从文件的最后一个 POST 中提取时间戳。有人可以告诉我我做错了什么吗?这可能非常明显,但我就是看不到。
问题是您使用了错误的方法来检索 <TIMESTAMP>
元素。 XElement.Elements
only returns child elements. In your case, <TIMESTAMP>
is three levels deep, so you need to use Descendants
相反。
ClassVars.LastTimeStamp = (int)root.Descendants("TIMESTAMP").Last();
假设这是整个文档(header除外),REGION 是 root 的唯一元素。
尝试使用 Descendants。
我在解析 XML 文档中的一个特定值时遇到一点问题。我使用的代码如下:
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
XDocument doc = XDocument.Load(responseStream);
XElement root = doc.Root;
ClassVars.LastTimeStamp = (int)root.Elements("TIMESTAMP").Last();
但是,此代码生成以下异常:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Core.dll
(完整的错误信息是 here。)
坦率地说,我这辈子都想不通为什么。它出错的行是 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>
我想要做的是从文件的最后一个 POST 中提取时间戳。有人可以告诉我我做错了什么吗?这可能非常明显,但我就是看不到。
问题是您使用了错误的方法来检索 <TIMESTAMP>
元素。 XElement.Elements
only returns child elements. In your case, <TIMESTAMP>
is three levels deep, so you need to use Descendants
相反。
ClassVars.LastTimeStamp = (int)root.Descendants("TIMESTAMP").Last();
假设这是整个文档(header除外),REGION 是 root 的唯一元素。 尝试使用 Descendants。