【发布时间】:2012-07-19 09:53:23
【问题描述】:
我的 xml 结构如下:
Header
\-Timeseries (1-N)
\- Period (1-N)
\- Interval (1-N)
这是一个大概的例子:
<Header>
<Element />
<Timeseries>
<Element />
<Period>
<Element />
<Interval>
<Element />
</Interval>
</Period>
</Timeseries>
</Header>
我希望读取标题元素,直到我点击 Timeseries,然后是 Timeseries 元素,直到我点击 Period,然后是 Period,直到我点击 Interval,和 Interval,直到我点击 Interval 的末尾。当我完成一个句号时,我正在写所有的间隔。
此特定文档有 614 个时间序列,每个时间序列有 1 个周期。
我正在解析它:
while (!xmlReader.EOF)
{
if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "Header")
{
while (xmlReader.Name != "Timeseries" && xmlReader.Read())
{
// read
}
}
else if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "Timeseries")
{
while (xmlReader.Name != "Period" && xmlReader.Read())
{
// read
}
}
else if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "Period")
{
while (xmlReader.Name != "Interval" && xmlReader.Read())
{
// read
}
}
else if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "Interval")
{
while (xmlReader.NodeType != XmlNodeType.EndElement && xmlReader.Read())
{
// read
}
}
else if (xmlReader.NodeType == XmlNodeType.EndElement && xmlReader.Name == "Period")
{
// write intervals
}
else
{
xmlReader.Read();
}
}
似乎只读取了 166/614 个句点。因此,我一定是在吞噬一些 xml,但在发现错误时遇到了麻烦。
转储读取表明时间序列 1-166 已正确解析,但此后不知何故解析停止。
【问题讨论】:
-
愚蠢的问题,但使用
XDocument和一些LINQ不会更容易吗? -
@TiesonT。很不幸的是,不行。有问题的文档可能非常大(最大 1GB),解析速度很重要。
标签: c# .net xmlreader code-inspection