Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XmlDocument не правильно читает данные 
:(
    Опции темы
Jonnik
Дата 29.4.2011, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 9.2.2006

Репутация: нет
Всего: нет



Подскажите насчет следующего.
Компонент 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;


Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  xml.rar 1,08 Kb
PM MAIL   Вверх
cat512
Дата 29.4.2011, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 3
Всего: 15



В Xml, корневой элемент может быть - только один! А вот элементов n-го уровня много. 
Цитата

 всегда равно 2 при любом файле xml

Это как понять? smile 
Цитата

но когда я задаю вручную в цикле количество корневых элемента, то он обрабатывает то количество корневых элементов которое указали

Ещё один разрыв мозга  smile. А как в цикле задать не вручную? Было бы странным если бы он( ленинградский почтальйон ) обрабатывал другое количество элементов, вместо исходно заданного.
Собственно я эти пёрлы к чему выделил, к тому что, исходную задачу нужно уметь формулировать, если конечно хочешь получить какой нить вразумительный ответ!
А это - "в огороде бузина, а в Киеве дядько"


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0600 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.