У меня проблема, над которой я работаю уже довольно давно. У меня есть файл XML с более чем 50000 записями (одна запись имеет 3 уровня). Этот файл используется одним из моих приложений для управления отправкой документа (запись содержит, среди прочих сведений, тип документа, который должен быть отправлен определенному лицу). Поэтому в моем приложении я загружаю XML-файл в XmlDocument, а затем с помощью метода SelectNodes создаю XmlNodeList, из которого я читаю нужные данные. Процесс такой: наш рабочий берет идентификационную карточку человека (простой eith штрих-код) и читает ее с помощью считывателя штрих-кодов. Когда значение штрих-кода было прочитано, мое приложение находит человека с этим идентификатором в XML-файле и сохраняет тип документа в строковой переменной. Затем рабочий берет документ и считывает его штрих-код, и если значение штрих-кода документов и значение в значении в строковой переменной совпадают, приложение делает запись, что документ типа xxxxxxxx будет отправлен лицу с идентификатором yyyyyyyyyy. Это очень простой код, он отлично работает сейчас, и вот как это выглядит: На textBox1_TextChanged события (работник чтения лиц ID):Резка большого XML-файла на более мелкие куски в C#
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 может быть до 500000 записей большой), будет такой подход действителен, или мне нужно вырезать файл в файлы меньшего размера. Если мне придется разрезать его, пожалуйста, дайте мне идею с некоторыми примерами кода, я пытался сделать это следующим образом: Чтением всей записи и хранение его в строку:
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, темп и SmallerXMLDocument все строковые переменные.
А потом в методе button_Click я загрузить файл XML в XmlNodeList (опять-таки с помощью XmlDocument.SelectNodes метод), и я стараюсь, чтобы создать одну большую строковое значение, которое будет держать все записи, как это:
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-файле может быть до полумиллиона записей)?
Благодаря
Почему вы используете XML для этих огромных данных, почему бы не рассмотреть возможность использования каких-либо СУБД, таких как SQL ect. ??? – yogi
К сожалению, я не один (и не моя компания), который создает и хранит записи, мы получаем его от нашего клиента, поэтому на данный момент у меня нет выбора, кроме как использовать XML-файл. – NDraskovic