Подскажите насчет следующего. Компонент XmlDocument читает только первые два корневых элемента. Т.е. | Код | XMLDocument1.ChildNodes.Count
|
всегда равно 2 при любом файле xml, но когда я задаю вручную в цикле количество корневых элемента, то он обрабатывает то количество корневых элементов которое указали. Получается, что срабатывает какое-то ограничение. В чем может быть проблема? Код и xml файл приведен ниже.
| Код | var i,j,n,m,k,lp:Integer; Node,Node1,Node2,Node3: IXMLNode; fr,fd:array[1..30] of string; // ñïèñîê òàáëèö s:string; t:Boolean; begin if Form1.OpenDialog1.Execute then begin XMLDocument1.LoadFromFile(Form1.OpenDialog1.FileName); // çàãðóçêà xml XMLDocument1.Active:=True; XMLDocument1.Encoding:='windows-1251'; lp:=XMLDocument1.ChildNodes.Count; //ShowMessage(Inttostr(lp)); if LabeledEdit1.Text='0' then lp:=XMLDocument1.ChildNodes.Count else lp:=StrToInt(LabeledEdit1.Text); for i:=0 to lp do // ïîäñ÷åò êîðíåâûõ ýëåìåíòîâ òèïà Äîêóìåíò begin if XMLDocument1.DocumentElement.ChildNodes[i].NodeName='Äîêóìåíò' then begin x[1]:=XMLDocument1.DocumentElement.ChildNodes[i].Attributes['Îò÷åòÃîä']; // îïåðåäåëÿåì çà êàêîé ãîä äàííûå ïî ðàáîòíèêó Node := XMLDocument1.DocumentElement.ChildNodes[i]; // Èñïîëüçóåòñÿ ÷òîáû íå ïèñàòü äëèííûå âëîæåíèÿ îäíîãî ðàçäåëà â äðóãóîé Äàëå ïî òåêòå ìîæíî ïîíÿòü äëÿ ÷åãî for j:=0 to Node.ChildNodes.Count-1 do begin s:=Node.ChildNodes[j].NodeName; // Íàçâàíèå ðàçäåëà if s='Ïîëó÷Äîõ' then begin x[2]:=Node.ChildNodes[j].ChildNodes['ÔÈÎ'].Attributes['Ôàìèëèÿ']; // Çàïèñü â ìàòðèöó àòðèáóòà Ôàìèëèÿ x[3]:=Node.ChildNodes[j].ChildNodes['ÔÈÎ'].Attributes['Èìÿ']; x[4]:=Node.ChildNodes[j].ChildNodes['ÔÈÎ'].Attributes['Îò÷åñòâî']; x[23]:=Node.ChildNodes[j].Attributes['Ñòàòóñ']; x[5]:=Node.ChildNodes[j].Attributes['ÄàòàÐîæä']; Delete(x[5],7,2); // Óäàëåíèå íåíóæíûõ ñèìâîëîâ â ôîðìàòå äàòà x[6]:=Node.ChildNodes[j].Attributes['Ãðàæä']; if x[6]<>'' then x[21]:=x[6]; x[7]:=Node.ChildNodes[j].ChildNodes['ÓäËè÷íÔË'].Attributes['ÊîäÓäËè÷í']; if x[7]<>'' then x[22]:=x[7]; x[8]:=Node.ChildNodes[j].ChildNodes['ÓäËè÷íÔË'].Attributes['ÑåðÍîìÄîê']; if x[8]<>'' then x[22]:=x[22]+', '+x[8]; x[9]:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ'].Attributes['Èíäåêñ']; if x[9]<>'' then x[21]:=x[21]+', '+x[9]; x[10]:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ'].Attributes['ÊîäÐåãèîí']; if x[10]<>'' then x[21]:=x[21]+', '+x[10]; Node3:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ']; if Node3.HasAttribute('Ãîðîä') then // ïðîâåðêà íà ñóùåñòâîâàíèå àòðèáóòà begin x[11]:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ'].Attributes['Ãîðîä']; if x[11]<>'' then x[21]:=x[21]+', '+x[11]; end; if Node3.HasAttribute('Ðàéîí') then begin x[12]:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ'].Attributes['Ðàéîí']; if x[12]<>'' then x[21]:=x[21]+', '+x[12]; x[13]:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ'].Attributes['ÍàñåëÏóíêò']; if x[13]<>'' then x[21]:=x[21]+', '+x[13]; end; if Node3.HasAttribute('Óëèöà') then begin x[14]:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ'].Attributes['Óëèöà']; if x[14]<>'' then x[21]:=x[21]+', '+x[14]; end; if Node3.HasAttribute('Äîì') then begin x[15]:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ'].Attributes['Äîì']; if x[15]<>'' then x[21]:=x[21]+', '+x[15]; end; if Node3.HasAttribute('Êîðïóñ') then begin x[16]:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ'].Attributes['Êîðïóñ']; if x[16]<>'' then x[21]:=x[21]+', '+x[16]; end; if Node3.HasAttribute('Êâàðò') then begin x[17]:=Node.ChildNodes[j].ChildNodes['ÀäðÌÆÐÔ'].Attributes['Êâàðò']; if x[17]<>'' then x[21]:=x[21]+', '+x[17]; end; end; if s='ÑâåäÄîõ' then begin x[18]:=Node.ChildNodes[j].Attributes['Ñòàâêà']; Node:=XMLDocument1.DocumentElement.ChildNodes[i].ChildNodes[j]; for n:=0 to Node.ChildNodes.Count-1 do begin s:=Node.ChildNodes[n].NodeName; if s='ÄîõÂû÷' then begin Node1:=Node.ChildNodes[n]; for m:=0 to Node1.ChildNodes.Count-1 do // îïåðåäåëåíèå êîëè÷åñòâà çàïèñåé ñ äîõîäàìè begin d[m+1,1]:=Node1.ChildNodes[m].Attributes['Ìåñÿö']; // çàïèñü äàííûõ ïðî äîõîä â ìàòðèöó d[m+1,2]:=Node1.ChildNodes[m].Attributes['ÊîäÄîõîä']; d[m+1,3]:=Node1.ChildNodes[m].Attributes['ÑóìÄîõîä']; Node2:=Node1.ChildNodes[m]; k:=Node2.ChildNodes.Count; if Node2.HasChildNodes=True then // Ïðîâåðêà ñóùåñòâîâàíèÿ ðàçäåëà begin d[m+1,4]:=Node2.ChildNodes['ÑâÑóìÂû÷'].Attributes['ÊîäÂû÷åò']; d[m+1,5]:=Node2.ChildNodes['ÑâÑóìÂû÷'].Attributes['ÑóìÂû÷åò']; end; end; end; if s='ÍàëÂû÷ÑÑÈ' then begin Node1:=Node.ChildNodes[n]; for m:=0 to Node1.ChildNodes.Count-1 do begin d1[m+1,1]:=Node1.ChildNodes[m].Attributes['ÊîäÂû÷åò']; // çàïèñü äàííûõ ïðî âû÷åò â ìàòðèöó d1[m+1,2]:=Node1.ChildNodes[m].Attributes['ÑóìÂû÷åò']; end; end; if s='ÑÃÄÍàëÏåð' then begin x[19]:=Node.ChildNodes[n].Attributes['ÍàëÈñ÷èñë']; x[20]:=Node.ChildNodes[n].Attributes['ÍàëÓäåðæ']; end; end; end; end; if (x[2]<>'') and (x[3]<>'') and (x[4]<>'') then // Åñëè åñòü âñå ÔÈÎ begin n:=1; Delete(x[1],1,2); // óäàëåíèå íóíóæíûõ öèôð â ãîäó while d[n,1]<>'' do // ïîêà íå ïóñòîé begin t:=False; k:=1; while fr[k]<>'' do begin if fr[k]='zspi'+x[1]+d[n,1] then t:=True; // ïðîâåðêà íà ñóùåñòâîâàíèå Inc(k); end; if t=False then begin TabR(x[1]+d[n,1]); // Ñîçäàíèå òàáëèöû ðàáî÷èõ fr[k]:='zspi'+x[1]+d[n,1]; //Äîáàâëÿåì íàçâàíèå òàáëèöû end; DobR(x[1]+d[n,1]); // Äîáàâëåíèå ðàáîòíèêà â òàáëèó t:=False; k:=1; while fd[k]<>'' do // ïîêà íå ïóñòàÿ çàïèñü begin if fd[k]='zdox'+x[1]+d[n,1] then t:=True; // Ïðîâåðêà íà ñóùåñòâîâàíèå òàáëèöû Inc(k); end; if t=False then begin TabD(x[1]+d[n,1]); // Çàïèñü ðàáîòíèêà â ñîîòâåò òàáëèöó fd[k]:='zdox'+x[1]+d[n,1]; // Äîáàâëÿåì íàçâàíèå òàáëèöû end; k:=0; while d[n+k,1]=d[n,1] do // ïîêà äâå çàïèñè îäèíàêîâûå, òî ðàáîòàåì begin DobD(x[1]+d[n,1],n+k); // Çàïèñü äîõîäà â ñîîòâåò òàáëèöó Inc(k); if d[n+k,1]<>d[n,1] then DobNal(x[1]+d[n,1]); end; n:=n+k; end; end; for j:=1 to 30 do x[j]:=''; // î÷èñòêà ìàòðèö for j:=1 to 50 do for n:=1 to 6 do d[j,n]:=''; for j:=1 to 50 do for n:=1 to 2 do d1[j,n]:=''; //if i=5 then Break; // îãðàíè÷åíèå ïî êîëè÷åñòâó ðàáîòíèêîâ end;
end; XMLDocument1.Active:=False; // Äåàêòèâèðóåì êîìïîíåíò end; end;
|
|