С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/68: Рейтинг темы: голосов - 68, средняя оценка - 4.65
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

Как правильно считать данные в .xml файле?

21.10.2011, 08:09. Показов 13933. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех.

Вопрос такой, есть логи утилиты AVZ, пример таких логов можете найти в разделе лечения. Меня интересует файл .xml там хранится струтурированая запись, пример ниже.
Примерная часть лога
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <?xml version="1.0" encoding="windows-1251" ?> 
- <AVZ Version="4.37" LogDate="18.10.2011 18:48:31" WinDir="C:\WINDOWS\" OS_MjVer="5" OS_MiVer="1" OS_Build="2600" BootMode="0" OS_CSDV="Service Pack 3" ProfileDir="C:\Documents and Settings\Maestro" Session="Console" Domain="" IsWow64="False" IsAdmin="True" Base64Mode="False" IsSRDisabled="True" MainDBDate="17.10.2011" CompHash="E9491F737B096B346EFADF104E48DAE4">
- <PROCESS>
  <ITEM PID="364" File="d:\programms\Антивирусы\piligrim\avz4.37\avz.exe" CheckResult="0" Descr="Антивирусная утилита AVZ" LegalCopyright="Антивирусная утилита AVZ" Hidden="0" CmdLine=""D:\Programms\Антивирусы\Piligrim\avz4.37\avz.exe"" Size="764416" Attr="rsAh" CreateDate="18.10.2011 18:46:05" ChangeDate="17.10.2011 16:40:24" MD5="B0BC3E0F7161842404BAB77EEA9E965B" Vendor="Лаборатория Касперского, 2007-2011" Product="Антивирусная утилита AVZ" OFN="avz.exe" NationalName="Y" /> 
  <ITEM PID="1980" File="c:\program files\borland\cbuilder6\bin\bcb.exe" CheckResult="-1" Descr="C++ Builder Development Environment" LegalCopyright="Copyright © 1996-2002 Borland Software Corporation" Hidden="0" CmdLine=""C:\Program Files\Borland\CBuilder6\Bin\bcb.exe" /np" Size="733696" Attr="rsAh" CreateDate="01.02.2002 14:00:00" ChangeDate="01.02.2002 14:00:00" MD5="0065F3C1F8E61AEEFE1B162DF048BD4D" Vendor="Borland Software Corporation" Product="Enterprise Suite" OFN="BCB.EXE" /> 
  <ITEM PID="1844" File="c:\windows\system32\ctfmon.exe" CheckResult="0" Descr="CTF Loader" LegalCopyright="© Microsoft Corporation. All rights reserved." Hidden="0" CmdLine=""C:\WINDOWS\system32\ctfmon.exe"" Size="37376" Attr="rsAh" CreateDate="14.04.2008 22:40:54" ChangeDate="14.04.2008 22:40:54" MD5="E880528ACB65C5E05EE7CF83B08464EA" Vendor="Microsoft Corporation" Product="Microsoft® Windows® Operating System" OFN="CTFMON.EXE" /> 
  <ITEM PID="1700" File="c:\windows\explorer.exe" CheckResult="-1" Descr="Проводник" LegalCopyright="© Корпорация Майкрософт. Все права защищены." Hidden="0" CmdLine="C:\WINDOWS\Explorer.EXE" Size="1926144" Attr="rsAh" CreateDate="14.04.2008 22:40:58" ChangeDate="14.04.2008 22:40:58" MD5="83CAF4EB235DA0D996983582C410BB9F" Vendor="Корпорация Майкрософт" Product="Операционная система Microsoft® Windows®" OFN="EXPLORER.EXE" /> 
  <ITEM PID="868" File="c:\windows\system32\lsass.exe" CheckResult="0" Descr="LSA Shell (Export Version)" LegalCopyright="© Microsoft Corporation. All rights reserved." Hidden="0" CmdLine="C:\WINDOWS\system32\lsass.exe" Size="13312" Attr="rsAh" CreateDate="14.04.2008 22:41:00" ChangeDate="14.04.2008 22:41:00" MD5="17C1AC326238EFADF17A0612AFD822AD" Vendor="Microsoft Corporation" Product="Microsoft® Windows® Operating System" OFN="lsass.exe" /> 
  <ITEM PID="1620" File="c:\program files\maxthon\maxthon.exe" CheckResult="-1" Descr="Maxthon Web Browser" LegalCopyright="Copyright (C) 2002" Hidden="0" CmdLine=""C:\Program Files\Maxthon\Maxthon.exe"" Size="2252800" Attr="rsAh" CreateDate="09.04.2011 16:06:48" ChangeDate="27.09.2008 13:09:32" MD5="7A24C776F434891DC214E157A3BBEC6A" Vendor="Maxthon International Ltd." Product="Maxthon Application" OFN="Maxthon.EXE" /> 
  <ITEM PID="704" File="d:\Мои документы\skype\skype\skype.exe" CheckResult="0" Descr="Skype" LegalCopyright="(c) Skype Technologies S.A." Hidden="0" CmdLine=""D:\Мои документы\Skype\skype\skype.exe" /datapath:"D:\Мои документы\Skype\profile" /removable" Size="15145352" Attr="RsAh" CreateDate="24.08.2011 21:27:00" ChangeDate="01.04.2011 18:17:36" MD5="798C049CF1B9C782531241F72B6B5C69" Vendor="Skype Technologies S.A." Product="Skype" OFN="Skype.exe" NationalName="Y" /> 
  <ITEM PID="1200" File="c:\windows\system32\svchost.exe" CheckResult="0" Descr="Generic Host Process for Win32 Services" LegalCopyright="© Microsoft Corporation. All rights reserved." Hidden="0" CmdLine="C:\WINDOWS\System32\svchost.exe -k netsvcs" Size="14336" Attr="rsAh" CreateDate="14.04.2008 22:41:12" ChangeDate="14.04.2008 22:41:12" MD5="E948A9079D0E6350BE92D4D3E0077F81" Vendor="Microsoft Corporation" Product="Microsoft® Windows® Operating System" OFN="svchost.exe" /> 
  <ITEM PID="1344" File="c:\windows\system32\svchost.exe" CheckResult="0" Descr="Generic Host Process for Win32 Services" LegalCopyright="© Microsoft Corporation. All rights reserved." Hidden="0" CmdLine="C:\WINDOWS\system32\svchost.exe -k LocalService" Size="14336" Attr="rsAh" CreateDate="14.04.2008 22:41:12" ChangeDate="14.04.2008 22:41:12" MD5="E948A9079D0E6350BE92D4D3E0077F81" Vendor="Microsoft Corporation" Product="Microsoft® Windows® Operating System" OFN="svchost.exe" /> 
  <ITEM PID="1024" File="c:\windows\system32\svchost.exe" CheckResult="0" Descr="Generic Host Process for Win32 Services" LegalCopyright="© Microsoft Corporation. All rights reserved." Hidden="0" CmdLine="C:\WINDOWS\system32\svchost -k DcomLaunch" Size="14336" Attr="rsAh" CreateDate="14.04.2008 22:41:12" ChangeDate="14.04.2008 22:41:12" MD5="E948A9079D0E6350BE92D4D3E0077F81" Vendor="Microsoft Corporation" Product="Microsoft® Windows® Operating System" OFN="svchost.exe" /> 
  <ITEM PID="1104" File="c:\windows\system32\svchost.exe" CheckResult="0" Descr="Generic Host Process for Win32 Services" LegalCopyright="© Microsoft Corporation. All rights reserved." Hidden="0" CmdLine="C:\WINDOWS\system32\svchost -k rpcss" Size="14336" Attr="rsAh" CreateDate="14.04.2008 22:41:12" ChangeDate="14.04.2008 22:41:12" MD5="E948A9079D0E6350BE92D4D3E0077F81" Vendor="Microsoft Corporation" Product="Microsoft® Windows® Operating System" OFN="svchost.exe" /> 
  <ITEM PID="812" File="c:\windows\system32\winlogon.exe" CheckResult="0" Descr="Программа входа в систему Windows NT" LegalCopyright="© Корпорация Майкрософт. Все права защищены." Hidden="0" CmdLine="winlogon.exe" Size="509440" Attr="rsAh" CreateDate="14.04.2008 22:41:14" ChangeDate="14.04.2008 22:41:14" MD5="B3B5D5855127E240C88451030AAEE76E" Vendor="Корпорация Майкрософт" Product="Операционная система Microsoft® Windows®" OFN="WINLOGON.EXE" /> 
  </PROCESS>
- <DLL>
  <ITEM File="C:\WINDOWS\system32\SHELL32.dll" CheckResult="-1" Descr="Общая библиотека оболочки Windows" LegalCopyright="© Корпорация Майкрософт. Все права защищены." UsedBy="364,1980,1844,1700,868,1620,704,1200,1344,1024,1104,812" Hidden="0" Size="18668032" Attr="rsAh" CreateDate="22.11.2008 18:01:41" ChangeDate="22.11.2008 18:01:41" MD5="2886A8BE1D1745D4549FDEB2AE395923" Vendor="Корпорация Майкрософт" Product="Операционная система Microsoft® Windows®" OFN="SHELL32.DLL" /> 
  <ITEM File="C:\WINDOWS\system32\wininet.dll" CheckResult="-1" Descr="Internet Extensions for Win32" LegalCopyright="© Microsoft Corporation. All rights reserved." UsedBy="364,1700,1620,704,1200" Hidden="0" Size="884224" Attr="rsAh" CreateDate="22.11.2008 18:02:13" ChangeDate="22.11.2008 18:02:13" MD5="3B92EE5C35FB449A4427694BA57AD5E5" Vendor="Microsoft Corporation" Product="Windows® Internet Explorer" OFN="wininet.dll" /> 
  <ITEM File="C:\WINDOWS\system32\COMRes.dll" CheckResult="-1" Descr="" LegalCopyright="(C) Корпорация Майкрософт (Microsoft Corporation), 1995-1999" UsedBy="364,1700,1620,704,1200,1024,1104,812" Hidden="0" Size="1466880" Attr="rsAh" CreateDate="14.04.2008 22:40:36" ChangeDate="14.04.2008 22:40:36" MD5="22C2FCB25366A89D6060BF7AA9EA3D30" Vendor="Корпорация Майкрософт" Product="Службы COM" /> 
  <ITEM File="C:\WINDOWS\system32\xpsp2res.dll" CheckResult="-1" Descr="Сообщения пакета обновления 2" LegalCopyright="© Корпорация Майкрософт (Microsoft Corp.) Все права защищены." UsedBy="364,1700,1620,704,1200,1344,1024,1104,812" Hidden="0" Size="4478976" Attr="rsAh" CreateDate="14.04.2008 01:08:22" ChangeDate="14.04.2008 01:08:22" MD5="557BC944E37436A8B132A96FEE82FEAD" Vendor="Корпорация Майкрософт" Product="Операционная система Microsoft® Windows®" OFN="xpsp2res.dll" /> 
...
...

Вот к примеру, меня интересует несколько значений в этом логе в секции PROCESS:
1. Имя файла(File)
2. Контрольная сумма(MD5)

Подскажите пожалуйста как правильно считать эти значения? Я гружу этот лог в список

C++
1
2
3
4
5
6
...
   TStringList *lGeneral = new TStringList();
   if(OpenDialog1->Execute()){
      lGeneral->LoadFromFile(OpenDialog1->FileName);
    }
...
А дальше не знаю как правильно осуществить считывание указаных значений. Подскажите если кто знает, буду благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2011, 08:09
Ответы с готовыми решениями:

Как обновить данные в файле xml на основе другого xml?
Добрый день! Мне необходимо разработать XSLT преобразование, которое будет обновлять данные в файле formats.xml (узлы name, shortName,...

Чтение из XML: как правильно считать информацию из блока
Добрый день,есть XML файл,с которого мне нужно прочитать информацию начиная с блока organization,почитав статьи по работе с xml написал...

как Считать данные из файла xml
Подскажите пожалуйста как считать данные которые находятся в самом тэге, а не между ними, тоесть на данном примере значения Х и Y из файла...

48
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
21.10.2011, 08:19
работайте , как положено, с XMLDocument, считывая значения необходимых атрибутов:
C++
1
2
node->GetAttribute("File");
node->GetAttribute("MD5");
, к сожалению, за более подробной информацией, как работать с IXMLDocument, вынужден посоветовать вам обратиться к необходимым источникам, коих много.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
21.10.2011, 09:36  [ТС]
Не нашёл этого компонента в билдере, на какой панели компонентов он должен быть? А в поиске по XMLDocument находит примеры, но я не могу их заставить работать, даже примитивно загрузить .xml файл и считать простое значение с выводом в Memo. Может кто-нибудь покажет на простеньком примере.
1
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
21.10.2011, 11:46
Лучший ответ Сообщение было отмечено как решение

Решение

Вложение
Вложения
Тип файла: rar WorkWithXMLPart1.rar (217.0 Кб, 351 просмотров)
4
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
21.10.2011, 15:50  [ТС]
QVO, Благодарю. Кое-где методом тыка разобрался кажется. Жаль что в C++ Builder 6.0 на палитре Internet этого компонента нет. Хотел дополнить основную утилиту новой возможностью...



Разбирался в CodeGear C++ Builder 2009 там есть. Наверное придётся переписывать проект на CodeGear 2009.

P.S. Частные вопросы остались, думаю, если чего не пойму - спрошу здесь.
1
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
21.10.2011, 16:56
Лучший ответ Сообщение было отмечено как решение

Решение

Maestro, вот, набросал примитивный вариант для шестого Билдера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//----------------------------------------------------------------------------------------------
String GetAttribute(String Line, String AttName);     // Функция получения значения заданного аттрибута
 
String GetAttribute(String Line, String AttName)
{
 
// Сделал при помощи списка (разбиваем всю строку на подстроки, вида "аттрибут=его_значение")
   String rString;     //Здесь будет хранится значение аттрибута
 
   TStringList *l=new TStringList;     // Собственно сам список
 
   l->Text=StringReplace(Line,"\" ","\"\n",TReplaceFlags()<<rfReplaceAll);    // Заполняем список
 
 
   rString=l->Values[AttName];     // Получаем значение заданного аттрибута
 
   //Далее, думаю, понятно
   return rString;
   delete l;
}
//----------------------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *lGeneral = new TStringList();
   if(OpenDialog1->Execute()){
 
   lGeneral->LoadFromFile(OpenDialog1->FileName);
 
 
 for(int i=0;i<lGeneral->Count;i++)
 {
     if( lGeneral->Strings[i]=="- <PROCESS>")
     {
 
 
          for(int j=i+1;j<lGeneral->Count;j++)
                {
                     if( lGeneral->Strings[j]=="  </PROCESS>") break;
 
                     Memo1->Lines->Add("File="+GetAttribute(lGeneral->Strings[j],"File") +"; MD5="+ GetAttribute(lGeneral->Strings[j],"MD5"));
 
 
                }
 
                break;
     }
 
 }
 
 }
 
 delete lGeneral;
 lGeneral=NULL;
}
//---------------------------------------------------------------------------
Добавлено через 1 минуту
Повторюсь - вариант примитивный. Работает нормально, но сделан на скорою руку и в некоторых местах можно несколько улучшить алгоритм.

Добавлено через 36 секунд
Возвращает значение аттрибутов в кавычках (но это исправить, я думаю, не проблема)

Добавлено через 1 минуту
Результат работы
File="d:\programms\Антивирусы\piligrim\a vz4.37\avz.exe"; MD5="B0BC3E0F7161842404BAB77EEA9E965B"
File="c:\program files\borland\cbuilder6\bin\bcb.exe"; MD5="0065F3C1F8E61AEEFE1B162DF048BD4D"
File="c:\windows\system32\ctfmon.exe"; MD5="E880528ACB65C5E05EE7CF83B08464EA"
File="c:\windows\explorer.exe"; MD5="83CAF4EB235DA0D996983582C410BB9F"
File="c:\windows\system32\lsass.exe"; MD5="17C1AC326238EFADF17A0612AFD822AD"
File="c:\program files\maxthon\maxthon.exe"; MD5="7A24C776F434891DC214E157A3BBEC6A"
File="d:\Мои документы\skype\skype\skype.exe"; MD5="798C049CF1B9C782531241F72B6B5C69"
File="c:\windows\system32\svchost.exe"; MD5="E948A9079D0E6350BE92D4D3E0077F81"
File="c:\windows\system32\svchost.exe"; MD5="E948A9079D0E6350BE92D4D3E0077F81"
File="c:\windows\system32\svchost.exe"; MD5="E948A9079D0E6350BE92D4D3E0077F81"
File="c:\windows\system32\svchost.exe"; MD5="E948A9079D0E6350BE92D4D3E0077F81"
File="c:\windows\system32\winlogon.exe"; MD5="B3B5D5855127E240C88451030AAEE76E"
3
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
21.10.2011, 19:39  [ТС]
Минус перед узлом нужно убрать, это форум отпарсил так, на самом деле его нет
Цитата Сообщение от NiTan Посмотреть сообщение
C++
1
2
3
...
if( lGeneral->Strings[i]=="- <PROCESS>")
...
Код хорош, но тут такие подводные камни получаются:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<ITEM File="C:\Program Files\Borland\CBuilder6\Bin\designide60.bpl"
CheckResult="-1"
 Descr="Borland IDE Designer Package"
 LegalCopyright="Copyright © 1999-2002 Borland Software Corporation"
 UsedBy="1980"
Hidden="0"
Size="706560"
Attr="rsAh"
CreateDate="01.02.2002 19:00:00"
ChangeDate="22.03.2002 13:02:28"
MD5="200BD1584D83BD8D9FD51E6991D65667"
Vendor="Borland Software Corporation"
Product="Borland Package Library"
OFN="DesignIde60.BPL"
/>
1. В некоторых случаях первым идёт File, а к ней приписывается <ITEM File, в этом случае функция возвращает пустое значение.
2. В некоторых случаях перед переменной вставляется пробел, тогда тоже прочесть не представляется возможным.

Можно ли как-то обработать строку так чтобы пробелов до не было и исключалась <ITEM ?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
21.10.2011, 20:18
судя по всему, для MD5 и File пробелы вам не нужны, их можно вырезать по принципу
C++
1
StringReplace(Line," ",""
1
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
21.10.2011, 20:20
Maestro, странный у тебя билдер, у меня в 6 вот что есть
P.S. тыкни спасибку LK, это он когда-то этот архив выкладывал.
Миниатюры
Как правильно считать данные в .xml файле?  
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
21.10.2011, 20:29
QVO, да будет вам .
Introduction to XML. Part 01
Introduction to XML. Part 02
Introduction to XML. Part 03
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
21.10.2011, 20:45  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
судя по всему, для MD5 и File пробелы вам не нужны
Кто знает, что мне пригодится в будущем, поэтому лучше позаботиться сразу об этом.
Цитата Сообщение от QVO Посмотреть сообщение
странный у тебя билдер, у меня в 6 вот что есть
Попробую завтра снести его под корень и установить заново, может при выборе установки я отказался от ряда компонент.

Добавлено через 8 минут
Вариант не подходит по одной простой причине
Цитата Сообщение от LK Посмотреть сообщение
StringReplace(Line," ",""
в пути\имени файла пробелы также могут содержаться. Примером тому папка Program Files
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
21.10.2011, 20:56
не может быть, чтобы в 6-м билдере не было возможности работать с ХМЛ , я не зря приводил те ссылки:
By default, an XML file created using C++Builder...
Introduction to XML. Часть 1
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
21.10.2011, 21:10  [ТС]
LK, да, да, уже переустановил, есть компонент на вкладке Интернет, вернее появился, видать я случайно удалил его или недоустановил при первой установке.
1
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
21.10.2011, 21:24
Цитата Сообщение от Maestro Посмотреть сообщение
Можно ли как-то обработать строку так чтобы пробелов до не было и исключалась <ITEM ?
Maestro, можно, но вот нужно ли? Если есть готовый для этого компонент.

Добавлено через 4 минуты
Цитата Сообщение от NiTan Посмотреть сообщение
Maestro, можно, но вот нужно ли?
Я имел ввиду, если вдруг не понял, что код можно подправить, если есть желание идти таким сложным путем.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
22.10.2011, 12:24  [ТС]
Цитата Сообщение от NiTan Посмотреть сообщение
Работает нормально, но сделан на скорою руку и в некоторых местах можно несколько улучшить алгоритм
А мне просто ещё интересно где и как можно улучить алгоритм?
Цитата Сообщение от NiTan Посмотреть сообщение
Я имел ввиду, если вдруг не понял, что код можно подправить, если есть желание идти таким сложным путем
Я буду делать через XMLDocument, но вот просто интересен твой код тоже.
1
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
22.10.2011, 17:08
Вот, кое-что подправил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
String GetAttribute(String Line, String AttName);     // Ôóíêöèÿ ïîëó÷åíèÿ çíà÷åíèÿ çàäàííîãî àòòðèáóòà
 
String GetAttribute(String Line, String AttName)
{
 
// Ñäåëàë ïðè ïîìîùè ñïèñêà (ðàçáèâàåì âñþ ñòðîêó íà ïîäñòðîêè, âèäà "àòòðèáóò=åãî_çíà÷åíèå")
   String rString;     //Çäåñü áóäåò õðàíèòñÿ çíà÷åíèå àòòðèáóòà
 
   TStringList *l=new TStringList;     // Ñîáñòâåííî ñàì ñïèñîê
 
   l->Text=StringReplace(Line,"\" ","\"\n",TReplaceFlags()<<rfReplaceAll);    // Çàïîëíÿåì ñïèñîê
 
   String pbuffer;
     for(int i=0;i<l->Count;i++)
     {
             pbuffer=l->Strings[i];
             if( pbuffer.Pos(AttName+"=")>0)
             {
       rString=pbuffer.SubString(pbuffer.Pos(AttName+"=")+String(AttName+"=").Length(),pbuffer.Length()-pbuffer.Pos(AttName+"=")+String(AttName+"=").Length());
       break;
       }
 
     }
 
   //Äàëåå, äóìàþ, ïîíÿòíî
   return rString;
   delete l;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *lGeneral = new TStringList();
   if(OpenDialog1->Execute()){
 
   lGeneral->LoadFromFile(OpenDialog1->FileName);
 
 
 for(int i=0;i<lGeneral->Count;i++)
 {
     if( lGeneral->Strings[i].Pos("<PROCESS>")>0)
     {
 
 
          for(int j=i+1;j<lGeneral->Count;j++)
                {
                     if( lGeneral->Strings[j].Pos("</PROCESS>")>0) break;
 
                     Memo1->Lines->Add("File="+GetAttribute(lGeneral->Strings[j],"File") +"; MD5="+ GetAttribute(lGeneral->Strings[j],"MD5"));
 
 
                }
 
                break;
     }
 
 }
 
 }
 
 delete lGeneral;
 lGeneral=NULL;
}
//---------------------------------------------------------------------------
1
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
22.10.2011, 17:09
Теперь с этим:
Цитата Сообщение от Maestro Посмотреть сообщение
1. В некоторых случаях первым идёт File, а к ней приписывается <ITEM File, в этом случае функция возвращает пустое значение.
2. В некоторых случаях перед переменной вставляется пробел, тогда тоже прочесть не представляется возможным.
Можно ли как-то обработать строку так чтобы пробелов до не было и исключалась <ITEM ?
Проблем быть не должно.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
23.10.2011, 00:42  [ТС]
LK, Прочитал твои ссылки по xml, английский правда плохо знаю, многого не понял, пытаюсь сделать вот так. Но почему-то компилировать, компилирует, но не выводит в memo, а выпадает в исключение, что я не так делаю? Можно ли привести простой пример, для получения списка подузлов и вывод значений необходимых мне атрибутов?

C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   if(OpenDialog1->Execute()){
      XMLDocument1->LoadFromFile(OpenDialog1->FileName);
      IXMLNode *nodVideo = XMLDocument1->DocumentElement;
      IXMLNodeList *lstVideos = nodVideo->ChildNodes;
      for(int i = 0; i < lstVideos->Count; i++)
         Memo1->Lines->Add(lstVideos[0].Get(i)->Text);
 
     }
}
Добавлено через 23 минуты
Прошу прощения, работает.
Цитата Сообщение от Maestro Посмотреть сообщение
Можно ли привести простой пример, для получения списка подузлов и вывод значений необходимых мне атрибутов?
Но с этим я запутался, уже третий раз медленно перечитываю ссылки...
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
23.10.2011, 00:49
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
_di_IXMLDocument xmlDoc;
xmlDoc = NewXMLDocument();
xmlDoc->Active = true;
if(OpenDialog1->Execute()){
  if (FileExists(OpenDialog1->FileName)) {
    xmlDoc->LoadFromFile(OpenDialog1->FileName);
  }
}
IXMLNode *xmlRoot = xmlDoc->DocumentElement;
IXMLNodeList *lstVideos = xmlRoot->ChildNodes;
_di_IXMLNode nodVideo = xmlRoot->ChildNodes->GetNode("ITEM");
Memo->Lines->Add(nodVideo->GetAttribute("File"));
Memo->Lines->Add(nodVideo->GetAttribute("MD5"));
не проверял
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
23.10.2011, 01:43  [ТС]
Проект делаю сейчас пробный, чтобы разобраться. Код ваш скомпилировался, но выпадает в ошибку. Как будто обращение к несуществующему элементу списка.

[IMG]http://s017.***********/i429/1110/28/96ebe26a80f3.png[/IMG]

Компилируется нормально, открывается файл нормально, но в исключение попадает на строке
C++
1
2
3
...
   _di_IXMLNode nodVideo = xmlRoot->ChildNodes->GetNode("ITEM");
...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2011, 01:43
Помогаю со студенческими работами здесь

Как правильно считать текс с xml файла (уровень:начинающий)?
Вобщем столкнулся с проблемой при считывании с xml файла, вроде как просто, но половину информации увы теряю. Не знаю что делать. Вот что...

Как считать данные из xml и записать в строку
Как считать данные из xml и записать в строку Есть xml &lt;Root atr=&quot;aaaa&quot;&gt;&lt;Node...

Как поместить данные в xml файл, а потом считать?
Всем привет, искал данные про xml, но чет не разобрался. Поэтому спрошу у вас: как поместите эти данные в xml файл, а потом считать: ...

Как считать все данные о файлах и сохранить в xml файл?
Добрый день. Подскажите пожалуйста. Как считать все данные о файлах (как считать имя, его размер в Мб), находящихся в каталоге указываемый...

Как правильно считать данные, полученные через Ajax?
Ajax отправляет в php-скрипт: var name = $('#name').val(); var phone = $('#phone').val(); var dataString =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru