6

進捗レポートの目的で XML ドキュメントから要素の数を取得するベスト プラクティスはありますか? 処理する必要があるフライトを含む 2 GB の XML ファイルがあり、最初にファイル内のすべての要素の数を取得し、次にカウンターを使用して、x のうち x のフライトがデータベースにインポートされていることを示します。

ファイル処理では、.NET (C#) で XmlTextReader を使用して、ドキュメント全体をメモリに読み込まずにデータを取得します (sax 解析と同様)。

問題は、これらの要素の数を非常に迅速に取得するにはどうすればよいかということです...ベストプラクティスはありますか、それとも最初にドキュメント全体を調べて i++; のようなことをする必要がありますか? ?

ありがとう!

4

2 に答える 2

7

確かに、ドキュメントを 2 回読むことができます。1回目は要素を単純にカウントするXmlReader.ReadToFollowingためです (たとえば、(またはおそらくReadToNextSibling) カウンターを増やしていきます:

int count = 0;
while (reader.ReadToFollowing(name))
{
    count++;
}

ただし、それはファイルを2回読み取ることを意味します...

別の方法として、ファイルの長さを確認し、ファイルを1 回読んだときに、基になるストリームの位置に基づいて、これまでに処理されたファイルの割合を報告することもできます。これは精度は低くなりますが、はるかに効率的です。ただし、位置を確認し続けることができるようにXmlReader、 a から直接作成する必要があります。Stream

于 2012-10-20T18:13:56.780 に答える
1
int count = 0;
using (XmlReader xmlReader = new XmlTextReader(new StringReader(text)))
{
    while (xmlReader.Read())
    {
        if (xmlReader.NodeType == XmlNodeType.Element &&
            xmlReader.Name.Equals("Flight"))
            count++;
    }
}
于 2012-10-20T18:10:47.447 に答える