次のような構造のxmlがあります。
Header
\-Timeseries (1-N)
\- Period (1-N)
\- Interval (1-N)
これはおおよその例です:
<Header>
<Element />
<Timeseries>
<Element />
<Period>
<Element />
<Interval>
<Element />
</Interval>
</Period>
</Timeseries>
</Header>
Timeseries に到達するまでヘッダー要素を読み、次に Period に到達するまで Timeseries 要素を読み、次に Interval に到達するまで Period を読み、さらに Interval の最後に到達するまで Interval を読みたいと思っています。ピリオドが終わったら、すべてのインターバルを書いています。
この特定のドキュメントには、時系列ごとに 1 つの期間を持つ 614 の時系列があります。
私はそれを解析しています:
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 が正しく解析されていることが示されますが、その後何らかの理由で解析が停止します。