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

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

21.10.2011, 08:09. Показов 14073. Ответов 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
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru