私はかなり長い間取り組んでいる問題を抱えています。50000を超えるレコードを含むXMLファイルがあります(1つのレコードには3つのレベルがあります)。このファイルは、私のアプリケーションの1つがドキュメントの送信を制御するために使用します(レコードには、他の情報の中でも、特定の人に送信する必要のあるドキュメントの種類が含まれます)。したがって、私のアプリケーションでは、XMLファイルをXmlDocumentにロードし、SelectNodesメソッドを使用して、必要なデータを読み取るXmlNodeListを作成します。プロセスは次のようになります-私たちの労働者は個人IDカード(単純なeithバーコード)を取り、バーコードリーダーでそれを読み取ります。バーコード値が読み取られると、アプリケーションはXMLファイルでそのIDを持つ人物を見つけ、ドキュメントのタイプを文字列変数に格納します。次に、ワーカーはドキュメントを取得し、そのバーコードを読み取ります。また、ドキュメントのバーコードの値と文字列変数の値の値が一致する場合、アプリケーションは、タイプxxxxxxxxのドキュメントがIDyyyyyyyyyの人に送信されることを記録します。これは非常に単純なコードであり、今のところ完全に機能し、次のようになります。textBox1_TextChangedイベント(ワーカーは個人IDを読み取ります):
foreach(XmlNode node in NodeList){
if(String.Compare(node.Attributes.GetNamedItem("ID").Value.ToString(),textBox1.Text)==0)
{
ControlString = node.ChildNode[3].FirstChild.Attributes.GetNamedItem("doctype").Value.ToString();
break;
}
}
textBox2.Focus();
そして、textBox2_TextChangedイベント(ワーカーはドキュメントのバーコードを読み取ります):
if(String.Compare(textBox2.Text,ControlString)==0)
{
//Create a record and insert it into a SQL database
}
私の質問は、アプリケーションがより大きなXMLファイルでどのように動作するか(XMLファイルは最大500,000レコードのサイズになる可能性があると言われました)、このアプローチは有効か、またはファイルをより小さなファイルにカットする必要があるかです。それを切り取らなければならない場合は、いくつかのコードサンプルを使ってアイデアを教えてください。私は次のようにしようとしました。レコード全体を読み取り、文字列に保存します。
private void WriteXml(XmlNode record)
{
tempXML = record.InnerXml;
temp = "<" + record.Name + " code=\"" + record.Attributes.GetNamedItem("code").Value + "\">" + Environment.NewLine;
temp += tempXML + Environment.NewLine;
temp += "</" + record.Name + ">";
SmallerXMLDocument += temp + Environment.NewLine;
temp = "";
i++;
}
tempXML、temp、およびSmallerXMLDocumentはすべて文字列変数です。
次に、button_ClickメソッドでXMLファイルをXmlNodeListにロードし(これもXmlDocument.SelectNodesメソッドを使用して)、次のようなすべてのレコードを保持する1つの大きな文字列値を作成しようとします。
foreach(XmlNode node in nodes)
{
if(String.Compare(node.ChildNode[3].FirstChild.Attributes.GetNamedItem("doctype").Value.ToString(),doctype1)==0)
{
WriteXML(node);
}
}
私のアイデアは、文字列値(この場合はSmallerXmlDocumentと呼ばれます)を作成し、XMLファイル全体を通過するときに、その文字列の値を新しいファイルにコピーすることでした。これは機能しますが、最大2000レコードのファイルに対してのみ機能します(そして私の場合はそれよりはるかに多くなります)。したがって、ファイルをより小さな断片に分割する必要がある場合、それを行うための最良の方法は何でしょうか(XMLファイルには最大50万のレコードが存在する可能性があることに注意してください)。
ありがとう