나는 꽤 오랫동안 작업하고있다. XML 파일에 50000 개가 넘는 레코드가 있습니다 (하나의 레코드에는 3 개의 레벨이 있음). 이 파일은 내 응용 프로그램 중 하나에서 문서 전송을 제어하는 데 사용됩니다 (레코드에는 다른 정보 중에서 특정 사람에게 보내야하는 문서 유형이 들어 있습니다). 그래서 내 응용 프로그램에서 XML 파일을 XmlDocument로로드 한 다음 SelectNodes 메서드를 사용하여 원하는 데이터를 읽는 XmlNodeList를 만듭니다. 과정은 이렇게 - 우리의 노동자는 사람 ID 카드 (간단한 eith 바코드)를 가지고 가고 바코드 독자로 그것을 읽는다. 바코드 값을 읽으면 내 응용 프로그램은 해당 ID를 가진 사람을 XML 파일에서 찾은 다음 문서의 유형을 문자열 변수에 저장합니다. 그런 다음 작업자가 문서를 가져 와서 바코드를 읽습니다. 문서 바코드의 값과 문자열 변수의 값이 일치하면 응용 프로그램은 xxxxxxxx 유형의 문서가 ID가 yyyyyyyyy 인 사람에게 전송된다는 레코드를 만듭니다. 이가 지금은 완벽하게 작동, 아주 간단한 코드이며,이 보이는 방법입니다 큰 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 이벤트에
가 (작업자가 문서에 바코드를 읽기) : textBox1_TextChanged 이벤트에 (노동자는 사람 ID를 읽기)if(String.Compare(textBox2.Text,ControlString)==0)
{
//Create a record and insert it into a SQL database
}
내 질문은 - 내 응용 프로그램은 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, 온도 및 SmallerXMLDocument 나는 그것을 절단해야하는 경우, 나에게 몇 가지 코드 샘플과 아이디어를주세요,이처럼하려고 노력했습니다 모든 문자열 변수입니다.
그리고 내가 (XmlDocument.SelectNodes 방법을 사용하여 다시)를 XmlNodeList으로 XML 파일을로드하고이 같은 모든 레코드를 보유 할 하나 개의 큰 문자열 값을 만들려고 button_Click 방법에 :
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 만 개의 레코드가있을 수 있다는 것을 명심하십시오.
감사합니다.
왜 거대한 데이터에 XML을 사용하고 있습니까? SQL과 같은 DBMS를 사용하지 않는 이유는 무엇입니까? ??? – yogi
불행히도, 나는 레코드를 생성하고 저장하는 회사가 아니기 때문에 클라이언트로부터 얻습니다. 그래서 지금은 XML 파일을 사용하는 것 외에는 선택의 여지가 없습니다. – NDraskovic