niktool |
Отправлено: 02.03.2007, 17:11 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Доброго вемени суток всем,!
Помогите решить проблему!
У меня имеются *.xml файлы со следующими данными:
-
-
0215FGDFG46511
АUFGDF
3DFGDF5
2.DFGDF5
EFGАUR
-
ECАКЕ
FDJHKMD
Mura
7F8512564376
-
SUFF1007261
SDF
RUFD
-
FDG0320945
2ID810313
322FFGGL0
0521394
V 04.94
V 05.90
1
01/MAR/2007 00:00:00
01/MAR/2007 00:00:00
-
ER5503
15FDG0
1FGD
O9FGD01
0GFDG
-
EdfKJKLC
JJNJNFKJF
Dmitrii
HJGGDLLDF
-
KLJDJKJF
MRDFD
RUDFW
-
24545415241
PGLDF742532
6DWR030
0524942
V 05.11
V 05.11
1
01/MAR/2007 00:00:00
01/MAR/2007 00:00:00
-
54GDF01
21FGDF0
1GDF
5469473
I0DFGF20
0
-
EC
MoFGFDFDFisFG
AFGDFG
GFD53610701
-
SUgf1007274
SGFHGgW
RU
-
3FGHGHFGH25201GFH172
MUI183450
32HGFH50
053GFHG9011
GFHFG
GHF
1
GHFGGFHFGHFG
GFHFGHFGHFGH00
-
5GFHFGHFG3
15FGHFGHFG0
1GFHFGH
O9GFHFGH01
0GF
мне нужно из этого *.xml файла вытащить нужные мне строки и избавиться от тегов,
к примеру из файла вывести все строки ********* и удалить из выведенных строк теги
не могу допетрить как (((.
|
|
niktool |
Отправлено: 02.03.2007, 17:20 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Доброго вемени суток всем,!
Теги на форуме ружуться, заменил "<" , ">" на "*"
Помогите решить проблему!
У меня имеются *.xml файлы со следующими данными:
*?xml version="1.0" encoding="windows-1251" ?*
- *REPAIRDATA TIMESTAMP="01.03.07 19:26:43" grgrgerger*
-
*SC01*0215FGDFG46511*/SC01*
*SC02*АUFGDF*/SC02*
*SC03*3DFGDF5*/SC03*
*SC04*2.DFGDF5*/SC04*
*SC05*EFGАUR*/SC05*
мне нужно из этого *.xml файла вытащить нужные мне строки и избавиться от тегов,
к примеру из файла вывести все строки *SC02*ggdffdgfg*/SC02* и удалить из выведенных строк теги
*SC02**/SC02*
не могу допетрить как (((. |
|
AVC |
Отправлено: 02.03.2007, 18:22 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
не могу допетрить как
|
1. Ишем первый *sc02*, запоминаем позицию в p0
2. Ишем первый */sc02*, запоминаем позицию в p1
3. Искомый результат между p0 + длина(*sco2*) и p1 копируем в приемник.
4. Вход становится на p1 + + длина(*/sco2*)
5. Переход к 1 если вход не кончился. |
|
Doga |
Отправлено: 02.03.2007, 19:30 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Мне кажется, проще воспользоваться стандартным XML-парсером, напр.
TXMLDocument на вкладке Internet, TjanXMLParser2 (см. в нете), TJvSimpleXML (см. в нете), или вообще напрямую использовать какой-нибудь XML*.DLL
Отредактировано Doga — 02.03.2007, 19:41
|
|
AVC |
Отправлено: 03.03.2007, 09:09 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE (Doga @ 02.03.2007, 18:30) | Мне кажется, проще воспользоваться стандартным XML-парсером ... |
Мне то же, ну а вдруг человеку хочется поработать руками |
|
olegenty |
Отправлено: 03.03.2007, 09:46 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
лично меня TXMLDocument очень не вставил. предпочёл ему TjanXMLParser2. последний, конечно не безгрешен, но всё же более функционален и удобен (например, в отличие от TXMLDocument, поддерживает XPath). а вообще, есть мнение, что если не работал ни с одним парсером, то лучше сразу использовать какой-нибудь бесплатный парсер типа expat (http://sourceforge.net/projects/expat/).
|
|
niktool |
Отправлено: 03.03.2007, 13:16 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Если не сложно приведите небольшой пример, как пользоваться TXMLDocument или TjanXMLParser2 или еще чего нибудь..
у меня маловато опыта и знаний в Builder C++
почитал доки по TXMLDocument .... для меня сложновато без примеров ((
я до этого написал программку формирования xml отечета... проблем не составило, использовал несложные средства ......
Если не трудно помогите примером
|
|
niktool |
Отправлено: 05.03.2007, 02:13 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
решил воспользоваться
XMLDocument1
void __fastcall TForm1::Button1Click(TObject *Sender)
{
XMLDocument1->XML->LoadFromFile("R044_473585160207193520.xml");
XMLDocument1->Active = true;
_di_IXMLNode SERVICECENTER = XMLDocument1->ChildNodes->FindNode(WideString( "SERVICECENTER " ) );
_di_IXMLNode SC01 = SERVICECENTER->GetChildNodes()->FindNode( WideString( "SC01" ) );
Label1->Caption = SC01->GetText();
}
выдает ошибку чтения... ((
отладчик указывает на строку
_di_IXMLNode SC01 = SERVICECENTER->GetChildNodes()->FindNode( WideString( "SC01" ) );
помогите разобраться, в чем прицина !
*?xml version="1.0" encoding="windows-1251" ?*
- *REPAIRDATA TIMESTAMP="01.03.07 19:26:43" grgrgerger*
- *SERVICECENTER*
*SC01*0215FGDFG46511*/SC01*
*SC02*АUFGDF*/SC02*
- *CUSTOMER*
*SC03*3DFGDF5*/SC03*
*SC04*2.DFGDF5*/SC04*
*SC05*EFGАUR*/SC05*
|
|
Rius |
Отправлено: 05.03.2007, 07:39 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
юзайте теги [ html ] [ /html ]
HTML | <?xml version="1.0" encoding="utf-8"?>
<AppOptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DevicesListView>Tile</DevicesListView>
</AppOptions> |
попробуйте
CODE | _di_IXMLNode Root = XMLDocument1->DocumentElement;
_di_IXMLNode ServiceCenter = Root->ChildNodes->Nodes[WideString( "SERVICECENTER" ) ];
_di_IXMLNode SC01 = ServiceCenter->ChildNodes->Nodes[WideString( "SC01" ) ]; |
Отредактировано Rius — 05.03.2007, 10:46
|
|
niktool |
Отправлено: 05.03.2007, 10:28 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Спасибо,
Rius!!
Все отлично работает!!
void __fastcall TForm1::Button1Click(TObject *Sender)
{
XMLDocument1->XML->LoadFromFile("R044_473585060107171026.xml");
XMLDocument1->Active = true;
_di_IXMLNode Root = XMLDocument1->DocumentElement;
_di_IXMLNode ServiceCenter = Root->ChildNodes->Nodes[WideString( "SERVICECENTER" ) ];
_di_IXMLNode SC01 = ServiceCenter->ChildNodes->Nodes[WideString( "SC01" ) ];
_di_IXMLNode CUSTOMER = ServiceCenter->ChildNodes->Nodes[WideString( "CUSTOMER" ) ];
_di_IXMLNode CU02 = CUSTOMER->ChildNodes->Nodes[WideString( "CU02" ) ];
_di_IXMLNode WORKORDER = CUSTOMER->ChildNodes->Nodes[WideString( "WORKORDER" ) ];
_di_IXMLNode WO02 = WORKORDER->ChildNodes->Nodes[WideString( "WO02" ) ];
_di_IXMLNode PHONE = WORKORDER->ChildNodes->Nodes[WideString( "PHONE" ) ];
_di_IXMLNode PH01 = PHONE->ChildNodes->Nodes[WideString( "PH01" ) ];
_di_IXMLNode REPAIRROW = PHONE->ChildNodes->Nodes[WideString( "REPAIRROW" ) ];
_di_IXMLNode RL04 = REPAIRROW->ChildNodes->Nodes[WideString( "RL04" ) ];
Появилась еще одна трудность для меня...... времени маловато для эксперементов
*?xml version="1.0" encoding="windows-1251" ?*
- *REPAIRDATA TIMESTAMP="01.03.07 19:26:43" grgrgerger*
- *SERVICECENTER*
*SC01*0215FGDFG46511*/SC01*
*SC02*АUFGDF*/SC02*
- *CUSTOMER*
*SC03*3DFGDF5*/SC03*
*SC04*2.DFGDF5*/SC04*
*SC05*EFGАUR*/SC05*
*/CUSTOMER*
*CUSTOMER*
*SC03*3DFGDF5*/SC03*
*SC04*2.DFGDF5*/SC04*
*SC05*EFGАUR*/SC05*
*/CUSTOMER*
Появилась еще одна проудность по *CUSTOMER*
_di_IXMLNode CUSTOMER = ServiceCenter->ChildNodes->Nodes[WideString( "CUSTOMER" ) ];
_di_IXMLNode CU02 = CUSTOMER->ChildNodes->Nodes[WideString( "CU02" ) ];
Вибирается конечно только первый CUSTOMER
Как считать второй CUSTOMER?
|
|