Recent

Author Topic: Please help me with XMLDocument  (Read 7464 times)

flasher86

  • New Member
  • *
  • Posts: 15
Please help me with XMLDocument
« on: September 04, 2010, 01:14:26 pm »
I am just starting to work with XML documents, and they are pretty clear when I look at them, but it is not so clear to me how to Parse XML using TXMLDocument to retrieve some barried elements.

I am giving a sample XML document which I have to sort out.

Quote
<GridResponse><Params><CurrentPageIndex>0</CurrentPageIndex><PageCount>1</PageCount><RecordCount>6</RecordCount><RecordOffset>0</RecordOffset><NewSelectedKeys>[]</NewSelectedKeys><CallbackParameter></CallbackParameter><ExpandedGroups></ExpandedGroups></Params><Templates><ctl00_MainContent_DBGridArtykul_0_0_0><![CDATA[
                                               <table width="100%" cellspacing="0" cellpadding="2" border="0">
                                               <tr><td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center"><img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22"></td>                                                                                                                                         
                                               </tr>
                                               </table>
                                             
                                             ]]></ctl00_MainContent_DBGridArtykul_0_0_0><ctl00_MainContent_DBGridArtykul_0_0_1><![CDATA[
                                               <table width="100%" cellspacing="0" cellpadding="2" border="0">
                                               <tr><td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center"><img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22"></td>                                                                                                                                         
                                               </tr>
                                               </table>
                                             
                                             ]]></ctl00_MainContent_DBGridArtykul_0_0_1><ctl00_MainContent_DBGridArtykul_0_0_2><![CDATA[
                                               <table width="100%" cellspacing="0" cellpadding="2" border="0">
                                               <tr><td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center"><img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22"></td>                                                                                                                                         
                                               </tr>
                                               </table>
                                             
                                             ]]></ctl00_MainContent_DBGridArtykul_0_0_2><ctl00_MainContent_DBGridArtykul_0_0_3><![CDATA[
                                               <table width="100%" cellspacing="0" cellpadding="2" border="0">
                                               <tr><td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): > 10 SZT" align="center"><img border="0" src="App_Themes/Theme_fs00227/images/A.gif" width="12" height="22"></td>                                                                                                                                         
                                               </tr>
                                               </table>
                                             
                                             ]]></ctl00_MainContent_DBGridArtykul_0_0_3><ctl00_MainContent_DBGridArtykul_0_0_4><![CDATA[
                                               <table width="100%" cellspacing="0" cellpadding="2" border="0">
                                               <tr><td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center"><img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22"></td>                                                                                                                                         
                                               </tr>
                                               </table>
                                             
                                             ]]></ctl00_MainContent_DBGridArtykul_0_0_4><ctl00_MainContent_DBGridArtykul_0_0_5><![CDATA[
                                               <table width="100%" cellspacing="0" cellpadding="2" border="0">
                                               <tr><td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center"><img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22"></td>                                                                                                                                         
                                               </tr>
                                               </table>
                                             
                                             ]]></ctl00_MainContent_DBGridArtykul_0_0_5></Templates><Data><![CDATA[[['#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>','03.3590-0700.1','Pokrywa / osłona','ATE','',3,'','T','','019','#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>',1,'','1'],['#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>','29834','Łącznik stabilizatora','FEBI Bilstein GmbH + Co KG','PROKIT',101,'','T','','019','#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>',2,'','1'],['#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>','60 92 9834','Łącznik stabilizatora','SWAG Autoteile GmbH','',151,'','','','019','#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>',3,'','1'],['#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): > 10 SZT" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/A.gif" width="12" height="22">#%cLt#%/td>','R0001','Tarcza hamulcowa','RACER','',10167,1,'','','019','#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): > 10 SZT" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/A.gif" width="12" height="22">#%cLt#%/td>',4,'R0001','1'],['#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>','R0001DL STD','Tuleja cylindrowa','AE','',141,'','T','','019','#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>',5,'','1'],['#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>','R0001DP STD','Tłok','AE','',141,'','T','T','019','#%cLt#%td style="width:15px;padding-left:1px;padding-right:1px;" title=" #Oddział 1033 (C.L.ŁÓDŹ): Artykuł dostępny na indywidualne zamówienie" align="center">#%cLt#%img border="0" src="App_Themes/Theme_fs00227/images/E.gif" width="12" height="22">#%cLt#%/td>',6,'','1']]]]></Data><Groups><![CDATA[[]]]></Groups></GridResponse>

From this document I need to elicit those parameters "'R0001DP STD','Tłok','AE','',141,'','T','T','019','"
Is there any way to elicit them separately and completely using XMLDocument or I have to do it manually by working on strings?

eny

  • Hero Member
  • *****
  • Posts: 1646
Re: Please help me with XMLDocument
« Reply #1 on: September 04, 2010, 01:47:41 pm »
Reading XML files with Lazarus is pretty straightforward. The wiki gives you a headstart.
You need to add the encoding to the XML file though.
In your case it's probably something like '<?xml version="1.0" encoding="ISO-8859-1"?>'.

However your example is a good example how not to use XML  :(
The data you need is hidden in a CDATA section.
And that's basically just raw data that you have to parse yourself. No XML parser can help you there (except when the CDATA itself containts a XML message; which partially seems to be the case in the example).
All posts based on: Win10 (Win64); Lazarus 3_4  (x64) 25-05-2024 (unless specified otherwise...)

flasher86

  • New Member
  • *
  • Posts: 15
Re: Please help me with XMLDocument
« Reply #2 on: September 04, 2010, 02:23:11 pm »
I understand, thanks for reply.

I just thought that it can be handled automatically.

Regarding this RAW data. Do you know some errorless and efficient way to divide this data into pieces?

I noticed that it has a few separators. First is [data][data][data][data] - I already did manual parsing. But then inside those brackets there are parameters stored in this way:

'something something', 'another piece of something', 'and so on'.

I can make a function which do it manually, but from past experience I know that I always miss something and some bugs occurs which gives me wrong data. I dont want to this mistake again. It's just I use very basic functions and procedures, I am lack of deeper use of pointers and such.

Can you help me out with parsing this one?
'something something', 'another piece of something', 'and so on'.

theo

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1930
Re: Please help me with XMLDocument
« Reply #3 on: September 04, 2010, 03:58:32 pm »
Can you help me out with parsing this one?
'something something', 'another piece of something', 'and so on'.

A simple way using TStringList:

Code: [Select]
uses strutils;
...
procedure TForm1.Button1Click(Sender: TObject);
var SL:TStringList;
  var i:integer;
begin
  SL:=TStringList.Create;
  SL.Delimiter:=',';
  SL.StrictDelimiter:=true;
  SL.DelimitedText:='''something something'', ''another piece of something'', ''and so on''';
  For i:=0 to SL.Count-1 do SL[i]:=TrimSet(SL[i],[' ',#39]);
  Memo1.Lines.Assign(SL); //display
  SL.free;
end;   

Your text may not contain other ' and , in this case.

captian jaster

  • Guest
Re: Please help me with XMLDocument
« Reply #4 on: September 04, 2010, 09:50:11 pm »
A simple way is to use GetPart from the LCLProc
Code: Pascal  [Select][+][-]
  1. Writeln(GetPart('[',']',SomeStr));
The first constant is the string that will be skipped to. the second is the lat string to be read.
The SomeStr is some string to read from..
so say SomeStr := 'Hello[Hello Man]';
It will print Hello Man :\

flasher86

  • New Member
  • *
  • Posts: 15
Re: Please help me with XMLDocument
« Reply #5 on: September 05, 2010, 08:50:12 am »
Thank you!

See, I always do things like this with too much effort when there are already nice functions to do it for me.
Raw Data becomes an usable input in 3 lines, and I assume that those functions are errorless.

captian jaster

  • Guest
Re: Please help me with XMLDocument
« Reply #6 on: September 05, 2010, 04:26:53 pm »
http://lazarus-ccr.sourceforge.net/docs/lcl/lclproc/getpart.html
Doesn't say anything about errors.
Also I use to do what you did to so take a look at the Run Time Library and learn some of the procedures and functions there.
http://www.freepascal.org/docs-html/rtl/index.html

 

TinyPortal © 2005-2018