Forum > General

Please help me with XMLDocument

(1/2) > >>

flasher86:
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>
--- End quote ---

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:
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).

flasher86:
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:

--- Quote from: flasher86 on September 04, 2010, 02:23:11 pm ---Can you help me out with parsing this one?
'something something', 'another piece of something', 'and so on'.

--- End quote ---

A simple way using TStringList:


--- Code: ---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;   
--- End code ---

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

captian jaster:
A simple way is to use GetPart from the LCLProc

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---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 :\

Navigation

[0] Message Index

[#] Next page

Go to full version