Recent

Author Topic: Lazarus and XML  (Read 2178 times)

skom

  • New member
  • *
  • Posts: 9
Lazarus and XML
« on: September 30, 2023, 05:37:48 pm »
This is my first contact with XML support and I have a problem. My XML input file looks like this:
Code: Pascal  [Select][+][-]
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <plan>
  3.         <jednostkiOrganizacyjne/>
  4.         <cykleDydaktyczne>
  5.                 <cyklDydaktyczny>
  6.                         <kod>2023</kod>
  7.                         <przedmiot id="7">
  8.                                 <kod>340-RK1-1PNN</kod>
  9.                         </przedmiot>
  10.                         <przedmiot id="8">
  11.                                 <kod>340-PS1-2LNN</kod>
  12.                                 <grupaZajeciowa id="7">
  13.                                         <liczbaGodzin>30.0</liczbaGodzin>
  14.                                         <spotkanie id="40">
  15.                                                 <data>2024-01-18</data>
  16.                                         </spotkanie>
  17.                                         <spotkanie id="41">
  18.                                                 <data>2023-12-21</data>
  19.                                         </spotkanie>
  20.                                         <spotkanie id="42">
  21.                                                 <data>2023-12-07</data>
  22.                                         </spotkanie>
  23.                                         <spotkanie id="43">
  24.                                                 <data>2023-11-23</data>
  25.                                         </spotkanie>
  26.                                         <spotkanie id="44">
  27.                                                 <data>2023-11-09</data>
  28.                                         </spotkanie>
  29.                                         <spotkanie id="45">
  30.                                                 <data>2023-10-26</data>
  31.                                         </spotkanie>
  32.                                         <spotkanie id="46">
  33.                                                 <data>2023-10-12</data>
  34.                                         </spotkanie>
  35.                                 </grupaZajeciowa>
  36.                                 <grupaZajeciowa id="8">
  37.                                         <liczbaGodzin>30.0</liczbaGodzin>
  38.                                         <spotkanie id="48">
  39.                                                 <data>2024-01-25</data>
  40.                                         </spotkanie>
  41.                                         <spotkanie id="49">
  42.                                                 <data>2024-01-11</data>
  43.                                         </spotkanie>
  44.                                 </grupaZajeciowa>
  45.                         </przedmiot>
  46.                         <przedmiot id="9">
  47.                                 <kod>340-ON2-2EG</kod>
  48.                                 <grupaZajeciowa id="9">
  49.                                         <liczbaGodzin>30.0</liczbaGodzin>
  50.                                 </grupaZajeciowa>
  51.                         </przedmiot>
  52.                         <przedmiot id="129">
  53.                                 <kod>340-PS1-3VPR</kod>
  54.                                 <grupaZajeciowa id="135">
  55.                                         <liczbaGodzin>15.0</liczbaGodzin>
  56.                                 </grupaZajeciowa>
  57.                         </przedmiot>   
  58.                 </cyklDydaktyczny>
  59.         </cykleDydaktyczne>
  60. </plan>
  61.  
and the program in lazarus:
Code: Pascal  [Select][+][-]
  1. program project2test;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. uses
  6.   SysUtils, laz2_DOM, laz2_XMLRead, laz2_XMLWrite;
  7.  
  8. procedure ProcessXMLtoCSV(inputFileName, outputFileName: string);
  9. var
  10.   XMLDocument: TXMLDocument;
  11.   RootNode, CykleNode, PrzedmiotNode, GrupaNode, SpotkanieNode: TDOMNode;
  12.   CSVFile: TextFile;
  13. begin
  14.   // Initialization of the XML document
  15.   ReadXMLFile(XMLDocument, inputFileName);
  16.   RootNode := XMLDocument.DocumentElement;
  17.  
  18.   // Opening the CSV file for writing
  19.   AssignFile(CSVFile, outputFileName);
  20.   Rewrite(CSVFile);
  21.  
  22.   try
  23.     // Processing cykleDydaktycznych
  24.     CykleNode := RootNode.FindNode('.//cykleDydaktyczne/cyklDydaktyczny');
  25.     while Assigned(CykleNode) do
  26.     begin
  27.       // Processing przedmiot
  28.       PrzedmiotNode := CykleNode.FindNode('.//przedmiot');
  29.       while Assigned(PrzedmiotNode) do
  30.       begin
  31.         // Processing grupaZajęciowa
  32.         GrupaNode := PrzedmiotNode.FindNode('.//grupaZajeciowa');
  33.         while Assigned(GrupaNode) do
  34.         begin
  35.           // Processing spotkanie
  36.           SpotkanieNode := GrupaNode.FindNode('.//spotkanie');
  37.           while Assigned(SpotkanieNode) do
  38.           begin
  39.             // Geting data
  40.             Write(CSVFile, GrupaNode.FindNode('liczbaGodzin').TextContent, #9);
  41.             Write(CSVFile, PrzedmiotNode.Attributes.GetNamedItem('kod').NodeValue, #9);
  42.             Write(CSVFile, SpotkanieNode.FindNode('data').TextContent, #9);
  43.  
  44.             Writeln(CSVFile);
  45.  
  46.             SpotkanieNode := SpotkanieNode.NextSibling;
  47.           end;
  48.  
  49.           GrupaNode := GrupaNode.NextSibling;
  50.         end;
  51.  
  52.         PrzedmiotNode := PrzedmiotNode.NextSibling;
  53.       end;
  54.  
  55.       CykleNode := CykleNode.NextSibling;
  56.     end;
  57.   finally
  58.     CloseFile(CSVFile);
  59.   end;
  60. end;
  61.  
  62. begin
  63.   try
  64.     ProcessXMLtoCSV('plan3.xml', 'plan.csv');
  65.  
  66.     Writeln('The CSV file has been generated.');
  67.   except
  68.     on E: Exception do
  69.       Writeln('An error occured: ', E.Message);
  70.   end;
  71. end.
  72.  
Unfortunately, the program finds nothing and the csv file is empty.
Where is my mistake?
« Last Edit: September 30, 2023, 05:45:43 pm by skom »

jamie

  • Hero Member
  • *****
  • Posts: 6735
Re: Lazarus and XML
« Reply #1 on: September 30, 2023, 05:47:12 pm »
I assume your test files are within the same folder as your project files? Otherwise, without a full path to it, you get nothing.
The only true wisdom is knowing you know nothing

skom

  • New member
  • *
  • Posts: 9
Re: Lazarus and XML
« Reply #2 on: September 30, 2023, 05:52:09 pm »
yes, both are in the same folder

Bart

  • Hero Member
  • *****
  • Posts: 5468
    • Bart en Mariska's Webstek
Re: Lazarus and XML
« Reply #3 on: September 30, 2023, 05:56:22 pm »
Is the './/' part correct (wouldn't '/' at the star suffice?).
B.t.w. I get massive memory leaks reports when running the program...

Bart
« Last Edit: September 30, 2023, 06:05:46 pm by Bart »

skom

  • New member
  • *
  • Posts: 9
Re: Lazarus and XML
« Reply #4 on: September 30, 2023, 06:19:32 pm »
I don't really understand, it should be */ ?  And how can I prevent excessive memory consumption in this case?

jamie

  • Hero Member
  • *****
  • Posts: 6735
Re: Lazarus and XML
« Reply #5 on: September 30, 2023, 06:30:46 pm »
The Nodes (TDomNode) all have owners.

So look at your code at the very start, who is the owner?

Maybe the XMLDocument.Free ? I don't know, I am just guessing, like everyone else!  :D
The only true wisdom is knowing you know nothing

Bart

  • Hero Member
  • *****
  • Posts: 5468
    • Bart en Mariska's Webstek
Re: Lazarus and XML
« Reply #6 on: September 30, 2023, 06:33:30 pm »
I know next to nothing about XML.

With your supplied xml:
Code: Pascal  [Select][+][-]
  1.     writeln('RootNode.NodeName=',RootNode.NodeName);   //TDOMElement.findnode
  2.     writeln('RootNode.FirstChild.NodeName=',RootNode.FirstChild.NodeName);
  3.     writeln('RootNode.FindNode(jednostkiOrganizacyjne) -> ',Assigned(RootNode.FindNode('jednostkiOrganizacyjne')));
  4.     writeln('* NextSibling -> ',Assigned(RootNode.FindNode('jednostkiOrganizacyjne').NextSibling));
  5.     writeln('* NextSibling.NodeName=',RootNode.FindNode('jednostkiOrganizacyjne').NextSibling.NodeName);
  6.     writeln('* NextSibling.NextSibling -> ',Assigned(RootNode.FindNode('jednostkiOrganizacyjne').NextSibling.NextSibling));
  7.  

Gives:
Code: [Select]
RootNode.NodeName=plan
RootNode.FirstChild.NodeName=jednostkiOrganizacyjne
RootNode.FindNode(jednostkiOrganizacyjne) -> TRUE
* NextSibling -> TRUE
* NextSibling.NodeName=cykleDydaktyczne
* NextSibling.NextSibling -> FALSE

It does not find any sibling node for 'cykleDydaktyczne' node, and therefore (?) FindNode will return False (FindNode calls NextSibling).
RootNode.NodeName=plan
RootNode.FirstChild.NodeName=jednostkiOrganizacyjne

Bart

  • Hero Member
  • *****
  • Posts: 5468
    • Bart en Mariska's Webstek
Re: Lazarus and XML
« Reply #7 on: September 30, 2023, 06:57:25 pm »
Changed the program and at least now it has output.
Code: Pascal  [Select][+][-]
  1. program test;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. uses
  6.   SysUtils, laz2_DOM, laz2_XMLRead, laz2_XMLWrite;
  7.  
  8. procedure ProcessXMLtoCSV(inputFileName, outputFileName: string);
  9. var
  10.   XMLDocument: TXMLDocument;
  11.   RootNode, CykleNode, PrzedmiotNode, GrupaNode, SpotkanieNode, ANode: TDOMNode;
  12.   CSVFile: TextFile;
  13.   S: DOMString;
  14. begin
  15.   // Initialization of the XML document
  16.   ReadXMLFile(XMLDocument, inputFileName);
  17.   RootNode := XMLDocument.DocumentElement;
  18.  
  19.   // Opening the CSV file for writing
  20.   AssignFile(CSVFile, outputFileName);
  21.   Rewrite(CSVFile);
  22.  
  23.   try
  24.  
  25.     // Processing cykleDydaktycznych
  26.     CykleNode := RootNode.FindNode('cykleDydaktyczne');
  27.     writeln('cykleDydaktyczne: ',Assigned(CykleNode));
  28.     if Assigned(CykleNode) then
  29.     begin
  30.       writeln('Found: cykleDydaktyczne');
  31.       CykleNode := CykleNode.FirstChild;
  32.       if Assigned(CykleNode) then writeln('CykleNode.NodeName=',CykleNode.NodeName) else writeln('CykleNode=nil');
  33.     end;
  34.     while Assigned(CykleNode) do
  35.     begin
  36.       // Processing przedmiot
  37.       PrzedmiotNode := CykleNode.FindNode('przedmiot');
  38.       while Assigned(PrzedmiotNode) do
  39.       begin
  40.         writeln('Found przedmiot');
  41.         // Processing grupaZajęciowa
  42.         GrupaNode := PrzedmiotNode.FindNode('grupaZajeciowa');
  43.         while Assigned(GrupaNode) do
  44.         begin
  45.           writeln('Found grupaZajeciowa');
  46.           // Processing spotkanie
  47.           SpotkanieNode := GrupaNode.FindNode('spotkanie');
  48.           while Assigned(SpotkanieNode) do
  49.           begin
  50.             writeln('Found spotkanie');
  51.             // Geting data
  52.             ANode := GrupaNode.FindNode('liczbaGodzin');
  53.             if Assigned(ANode) then
  54.               S := ANode.TextContent
  55.             else
  56.               S := '[empty]';
  57.             Write(CSVFile, S{GrupaNode.FindNode('liczbaGodzin').TextContent}, #9);
  58.  
  59.             ANode := PrzedmiotNode.Attributes.GetNamedItem('kod');
  60.             if Assigned(ANode) then
  61.               S := ANode.NodeValue
  62.             else
  63.               S := '[empty]';
  64.             Write(CSVFile, S{PrzedmiotNode.Attributes.GetNamedItem('kod').NodeValue}, #9);
  65.  
  66.             ANode := SpotkanieNode.FindNode('data');
  67.             if Assigned(ANode) then
  68.               S := ANode.TextContent
  69.             else
  70.               S := '[empty]';
  71.             Write(CSVFile, S{SpotkanieNode.FindNode('data').TextContent}, #9);
  72.  
  73.             Writeln(CSVFile);
  74.  
  75.             SpotkanieNode := SpotkanieNode.NextSibling;
  76.           end;
  77.  
  78.           GrupaNode := GrupaNode.NextSibling;
  79.         end;
  80.  
  81.         PrzedmiotNode := PrzedmiotNode.NextSibling;
  82.       end;
  83.  
  84.       CykleNode := CykleNode.NextSibling;
  85.     end;
  86.   finally
  87.     CloseFile(CSVFile);
  88.   end;
  89. end;
  90.  
  91. begin
  92.   //try
  93.     ProcessXMLtoCSV('plan3.xml', 'plan.csv');
  94.  
  95.     Writeln('The CSV file has been generated.');
  96.   //except
  97.   //  on E: Exception do
  98.   //    Writeln('An error occured: ', E.Message);
  99.   //end;
  100. end.

Notice that I removed all starting slashes from the nodenames in FindNode().

Notice that I also changed the writing to CSV file, since FindNode and Attributes.GetNamedItem can return nil, so you need to check that (without the check the program crashes with "EObjectCheck: Object reference is Nil").

It looks cumbersome this way, and some more experienced person migt have a better way of fixing this.
I hope this can get you started.

Bart

wp

  • Hero Member
  • *****
  • Posts: 12459
Re: Lazarus and XML
« Reply #8 on: September 30, 2023, 07:18:28 pm »
I normally iterate through the xml tree myself, without the FindNode methods because in my way of thinking I too often miss some nodes this way or get lost in endless loops. I do use FindNode to arrive at the non-repetitive part of the tree, and then I use FirstChild and NextSibling to walk along the tree. I always add a nodeName variable which makes the NodeName of the currently worked node available to the debugger so that I know where I am.

The xml gurus certainly know better ways...

With the xml presented I end up with the following code and the following csv output (Not sure whether the WriteLn instruction is at the correct location because I do not understand the contents of the xml file and what should be exported):

Code: Pascal  [Select][+][-]
  1. procedure ProcessXMLtoCSV(inputFileName, outputFileName: string);
  2. var
  3.   XMLDocument: TXMLDocument;
  4.   RootNode, CykleNode, cyklDydaktycznyNode,
  5.     PrzedmiotNode, przedmiot_childNode, grupaZajeciowa_childNode: TDOMNode;
  6.   CSVFile: TextFile;
  7.   nodeName: String;
  8.   kod_value, liczbaGodzin_Value, data_Value: String;
  9. begin
  10.   // Initialization of the XML document
  11.   ReadXMLFile(XMLDocument, inputFileName);
  12.   RootNode := XMLDocument.DocumentElement;
  13.  
  14.   // Opening the CSV file for writing
  15.   AssignFile(CSVFile, outputFileName);
  16.   Rewrite(CSVFile);
  17.  
  18.   try
  19.     // Processing cykleDydaktycznych
  20.     CykleNode := RootNode.FindNode('cykleDydaktyczne');
  21.     if Assigned(CykleNode) then
  22.     begin
  23.       cyklDydaktycznyNode := CykleNode.FindNode('cyklDydaktyczny');
  24.       if Assigned(cyklDydaktycznyNode) then
  25.       begin
  26.         // Processing przedmiot
  27.         PrzedmiotNode := cyklDydaktycznyNode.FindNode('przedmiot');
  28.         while Assigned(PrzedmiotNode) do
  29.         begin
  30.           nodeName := PrzedmiotNode.NodeName;
  31.           przedmiot_ChildNode := PrzedmiotNode.FirstChild;
  32.           while Assigned(przedmiot_childnode) do
  33.           begin
  34.             // Processing  children of przedmiot
  35.             nodeName := przedmiot_childNode.NodeName;
  36.             if nodeName = 'kod' then
  37.               kod_value := przedmiot_childNode.TextContent
  38.             else
  39.             if nodeName = 'grupaZajeciowa' then
  40.             begin
  41.               // Processing children of grupaZajeciowa
  42.               grupaZajeciowa_childNode := przedmiot_childNode.FirstChild;
  43.               while Assigned(grupaZajeciowa_childNode) do
  44.               begin
  45.                 nodeName := grupaZajeciowa_childNode.NodeName;
  46.                 case nodeName of
  47.                   'liczbaGodzin':
  48.                     liczbaGodzin_Value := grupaZajeciowa_childNode.TextContent;
  49.                   'spotkanie':
  50.                     begin
  51.                       data_Value := grupaZajeciowa_childNode.TextContent;
  52.                       WriteLn(CSVFile, liczbaGodzin_value, #9, kod_value, #9, data_value);
  53.                     end;
  54.                 end;
  55.                 grupaZajeciowa_ChildNode := grupaZajeciowa_childNode.NextSibling;
  56.               end;
  57.             end;
  58.             przedmiot_childnode := przedmiot_childnode.NextSibling;
  59.           end;
  60.           przedmiotNode := przedmiotNode.NextSibling;
  61.         end;
  62.       end;
  63.     end;
  64.   finally
  65.     CloseFile(CSVFile);
  66.   end;
  67. end;

Code: [Select]
30.0 340-PS1-2LNN 2024-01-18
30.0 340-PS1-2LNN 2023-12-21
30.0 340-PS1-2LNN 2023-12-07
30.0 340-PS1-2LNN 2023-11-23
30.0 340-PS1-2LNN 2023-11-09
30.0 340-PS1-2LNN 2023-10-26
30.0 340-PS1-2LNN 2023-10-12
30.0 340-PS1-2LNN 2024-01-25
30.0 340-PS1-2LNN 2024-01-11

dsiders

  • Hero Member
  • *****
  • Posts: 1282
Re: Lazarus and XML
« Reply #9 on: September 30, 2023, 10:22:18 pm »
I don't really understand, it should be */ ?

FindNode accepts a child node name and not an XPath expression. You'd need to use TXPathExpression classes for that functionality.

https://lazarus-ccr.sourceforge.io/docs/lazutils/laz2_xpath/evaluatexpathexpression.html
Preview the next Lazarus documentation release at: https://dsiders.gitlab.io/lazdocsnext

skom

  • New member
  • *
  • Posts: 9
Re: Lazarus and XML
« Reply #10 on: October 01, 2023, 06:19:47 am »
thank you all for your help, I'm checking all the tips you provided :)

#Bart
In your code I always have "kod" [empty], even though it is in xml? :(

skom

Bart

  • Hero Member
  • *****
  • Posts: 5468
    • Bart en Mariska's Webstek
Re: Lazarus and XML
« Reply #11 on: October 01, 2023, 09:38:45 am »
Use wp's code, not mine.

Bart

jamie

  • Hero Member
  • *****
  • Posts: 6735
Re: Lazarus and XML
« Reply #12 on: October 01, 2023, 03:42:59 pm »
Is it me or does the XLMDocument instant need to be FREED at the end?

 I am a sticker for resources usage. %)
The only true wisdom is knowing you know nothing

wp

  • Hero Member
  • *****
  • Posts: 12459
Re: Lazarus and XML
« Reply #13 on: October 01, 2023, 03:49:59 pm »
You are right. I saw it yesterday, but then forgot to write a note.

skom

  • New member
  • *
  • Posts: 9
Re: Lazarus and XML
« Reply #14 on: October 01, 2023, 05:59:02 pm »
Thank you Bart and wp :)

#wp

I'm working on your code now :) and I have a problem, I've been working on it for an hour and unfortunately without a positive result :( - yesterday I gave a simplified sentence (I thought I could still handle it myself, unfortunately not :( )
If the xml file has the form:

Code: Pascal  [Select][+][-]
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <plan>
  3.         <jednostkiOrganizacyjne>
  4.                 <jednostkaOrganizacyjna id="256">
  5.                         <kod>26000000</kod>
  6.                         <opis>Szkoła Doktorska Nauk Humanistycznych</opis>
  7.                 </jednostkaOrganizacyjna>
  8.         </jednostkiOrganizacyjne>              
  9.         <budynki>
  10.                 <budynek id="2">
  11.                         <kod>WFIL</kod>
  12.                         <nazwa>Budynek Wydziału Filologicznego</nazwa>
  13.                         <kampus ref="2"/>
  14.                         <jednostkaOrganizacyjna ref="992"/>
  15.                         <sala id="3">
  16.                                 <numer>47</numer>
  17.                                 <pojemnosc>75</pojemnosc>
  18.                                 <USOSid>359</USOSid>
  19.                                 <jednostkaOrg>992</jednostkaOrg>
  20.                                 <metraz/>
  21.                                 <czyDydaktyczna>True</czyDydaktyczna>
  22.                                 <atrybutSali>Internet dla prowadzącego</atrybutSali>
  23.                                 <atrybutSali>Nagłośnienie</atrybutSali>
  24.                         </sala>
  25.                         <sala id="4">
  26.                                 <numer>48</numer>
  27.                                 <pojemnosc>50</pojemnosc>
  28.                                 <USOSid>360</USOSid>
  29.                                 <jednostkaOrg>992</jednostkaOrg>
  30.                                 <metraz/>
  31.                                 <czyDydaktyczna>True</czyDydaktyczna>
  32.                                 <atrybutSali>Rzutnik multimedialny</atrybutSali>
  33.                         </sala>
  34.                         <sala id="5">
  35.                                 <numer>54</numer>
  36.                                 <pojemnosc>19</pojemnosc>
  37.                                 <USOSid>361</USOSid>
  38.                                 <jednostkaOrg>992</jednostkaOrg>
  39.                                 <metraz/>
  40.                                 <czyDydaktyczna>True</czyDydaktyczna>
  41.                                 <atrybutSali>Sala komputerowa</atrybutSali>
  42.                                 <atrybutSali>Internet dla prowadzącego</atrybutSali>
  43.                                 <atrybutSali>Tablica (ścieralna)</atrybutSali>
  44.                         </sala>
  45.                 </budynek>
  46.         </budynki>
  47.         <pracownicy>
  48.                 <pracownik id="202" obcy="False">
  49.                         <imie>A</imie>
  50.                         <nazwisko>K</nazwisko>
  51.                         <prac_id>36</prac_id>
  52.                         <tytulyStopnie>Pan</tytulyStopnie>
  53.                         <funkcja>
  54.                                 <jednostkaOrganizacyjna ref="1236"/>
  55.                                 <nazwa>A</nazwa>
  56.                         </funkcja>
  57.                 </pracownik>
  58.                 <pracownik id="28" obcy="False">
  59.                         <imie>D</imie>
  60.                         <nazwisko>P</nazwisko>
  61.                         <prac_id>31</prac_id>
  62.                         <tytulyStopnie>Pan</tytulyStopnie>
  63.                         <funkcja>
  64.                                 <jednostkaOrganizacyjna ref="1035"/>
  65.                                 <nazwa>A</nazwa>
  66.                         </funkcja>
  67.                 </pracownik>
  68.                 <pracownik id="74" obcy="False">
  69.                         <imie>K</imie>
  70.                         <nazwisko>K</nazwisko>
  71.                         <prac_id>43</prac_id>
  72.                         <tytulyStopnie>Pani</tytulyStopnie>
  73.                         <funkcja>
  74.                                 <jednostkaOrganizacyjna ref="1051"/>
  75.                                 <nazwa>wykładowca</nazwa>
  76.                         </funkcja>
  77.                 </pracownik>
  78.                 <pracownik id="119" obcy="False">
  79.                         <imie>E</imie>
  80.                         <nazwisko>F L</nazwisko>
  81.                         <prac_id>34</prac_id>
  82.                         <tytulyStopnie>Pan</tytulyStopnie>
  83.                         <funkcja>
  84.                                 <jednostkaOrganizacyjna ref="1054"/>
  85.                                 <nazwa>A</nazwa>
  86.                         </funkcja>
  87.                 </pracownik>           
  88.         </pracownicy>
  89.         <cykleDydaktyczne>
  90.                 <cyklDydaktyczny id="1">
  91.                         <dataOd>2023-10-01 00:00:00</dataOd>
  92.                         <dataDo>2024-06-30 00:00:00</dataDo>
  93.                         <kod>2023</kod>
  94.                         <opis>Rok 2023/24</opis>
  95.                         <przedmiot id="7">
  96.                                 <nazwa>Praktyczna nauka drugiego języka obcego - j. niemiecki</nazwa>
  97.                                 <kod>340-RK1-1PNN</kod>
  98.                                 <jednostkaOrganizacyjna ref="992"/>
  99.                         </przedmiot>
  100.                         <przedmiot id="8">
  101.                                 <nazwa>Literatura najnowsza</nazwa>
  102.                                 <kod>340-PS1-2LNN</kod>
  103.                                 <jednostkaOrganizacyjna ref="992"/>
  104.                                 <grupaZajeciowa id="7">
  105.                                         <numer>1</numer>
  106.                                         <liczbaGodzin>30.0</liczbaGodzin>
  107.                                         <idZajec>228703</idZajec>
  108.                                         <typ>KON</typ>
  109.                                         <prowadzacy ref="28"/>
  110.                                         <spotkanie id="40">
  111.                                                 <data>2024-01-18</data>
  112.                                                 <godzinaOd>11:30:00</godzinaOd>
  113.                                                 <godzinaDo>13:00:00</godzinaDo>
  114.                                                 <sala ref="3"/>
  115.                                                 <termin ref="4"/>
  116.                                                 <prowadzacy ref="28"/>
  117.                                         </spotkanie>
  118.                                         <spotkanie id="41">
  119.                                                 <data>2023-12-21</data>
  120.                                                 <godzinaOd>11:30:00</godzinaOd>
  121.                                                 <godzinaDo>13:00:00</godzinaDo>
  122.                                                 <sala ref="3"/>
  123.                                                 <termin ref="4"/>
  124.                                                 <prowadzacy ref="28"/>
  125.                                         </spotkanie>
  126.                                         <spotkanie id="42">
  127.                                                 <data>2023-12-07</data>
  128.                                                 <godzinaOd>11:30:00</godzinaOd>
  129.                                                 <godzinaDo>13:00:00</godzinaDo>
  130.                                                 <sala ref="3"/>
  131.                                                 <termin ref="4"/>
  132.                                                 <prowadzacy ref="28"/>
  133.                                         </spotkanie>
  134.                                         <spotkanie id="43">
  135.                                                 <data>2023-11-23</data>
  136.                                                 <godzinaOd>11:30:00</godzinaOd>
  137.                                                 <godzinaDo>13:00:00</godzinaDo>
  138.                                                 <sala ref="3"/>
  139.                                                 <termin ref="4"/>
  140.                                                 <prowadzacy ref="28"/>
  141.                                         </spotkanie>
  142.                                         <spotkanie id="44">
  143.                                                 <data>2023-11-09</data>
  144.                                                 <godzinaOd>11:30:00</godzinaOd>
  145.                                                 <godzinaDo>13:00:00</godzinaDo>
  146.                                                 <sala ref="3"/>
  147.                                                 <termin ref="4"/>
  148.                                                 <prowadzacy ref="28"/>
  149.                                         </spotkanie>
  150.                                         <spotkanie id="45">
  151.                                                 <data>2023-10-26</data>
  152.                                                 <godzinaOd>11:30:00</godzinaOd>
  153.                                                 <godzinaDo>13:00:00</godzinaDo>
  154.                                                 <sala ref="3"/>
  155.                                                 <termin ref="4"/>
  156.                                                 <prowadzacy ref="28"/>
  157.                                         </spotkanie>
  158.                                         <spotkanie id="46">
  159.                                                 <data>2023-10-12</data>
  160.                                                 <godzinaOd>11:30:00</godzinaOd>
  161.                                                 <godzinaDo>13:00:00</godzinaDo>
  162.                                                 <sala ref="3"/>
  163.                                                 <termin ref="4"/>
  164.                                                 <prowadzacy ref="28"/>
  165.                                         </spotkanie>
  166.                                         <spotkanie id="47">
  167.                                                 <data>2024-01-25</data>
  168.                                                 <godzinaOd>12:15:00</godzinaOd>
  169.                                                 <godzinaDo>13:00:00</godzinaDo>
  170.                                                 <sala ref="3"/>
  171.                                                 <termin ref="4"/>
  172.                                                 <prowadzacy ref="28"/>
  173.                                         </spotkanie>
  174.                                         <terminGrupy id="4">
  175.                                                 <czestotliwosc>co dwa tygodnie (nieparzyste)</czestotliwosc>
  176.                                                 <dzienTygodnia>3</dzienTygodnia>
  177.                                                 <godzinaOd>11:30:00</godzinaOd>
  178.                                                 <godzinaDo>13:00:00</godzinaDo>
  179.                                                 <sala ref="3"/>
  180.                                                 <uwagi/>
  181.                                                 <usosId>85899</usosId>
  182.                                         </terminGrupy>
  183.                                 </grupaZajeciowa>
  184.                                 <grupaZajeciowa id="8">
  185.                                         <numer>2</numer>
  186.                                         <liczbaGodzin>30.0</liczbaGodzin>
  187.                                         <idZajec>228703</idZajec>
  188.                                         <typ>KON</typ>
  189.                                         <prowadzacy ref="68"/>
  190.                                         <spotkanie id="48">
  191.                                                 <data>2024-01-25</data>
  192.                                                 <godzinaOd>11:30:00</godzinaOd>
  193.                                                 <godzinaDo>12:15:00</godzinaDo>
  194.                                                 <sala ref="3"/>
  195.                                                 <termin ref="5"/>
  196.                                                 <prowadzacy ref="68"/>
  197.                                         </spotkanie>
  198.                                         <spotkanie id="49">
  199.                                                 <data>2024-01-11</data>
  200.                                                 <godzinaOd>11:30:00</godzinaOd>
  201.                                                 <godzinaDo>13:00:00</godzinaDo>
  202.                                                 <sala ref="3"/>
  203.                                                 <termin ref="5"/>
  204.                                                 <prowadzacy ref="68"/>
  205.                                         </spotkanie>
  206.                                         <spotkanie id="50">
  207.                                                 <data>2023-12-14</data>
  208.                                                 <godzinaOd>11:30:00</godzinaOd>
  209.                                                 <godzinaDo>13:00:00</godzinaDo>
  210.                                                 <sala ref="3"/>
  211.                                                 <termin ref="5"/>
  212.                                                 <prowadzacy ref="68"/>
  213.                                         </spotkanie>
  214.                                         <spotkanie id="51">
  215.                                                 <data>2023-11-30</data>
  216.                                                 <godzinaOd>11:30:00</godzinaOd>
  217.                                                 <godzinaDo>13:00:00</godzinaDo>
  218.                                                 <sala ref="3"/>
  219.                                                 <termin ref="5"/>
  220.                                                 <prowadzacy ref="68"/>
  221.                                         </spotkanie>
  222.                                         <spotkanie id="52">
  223.                                                 <data>2023-11-16</data>
  224.                                                 <godzinaOd>11:30:00</godzinaOd>
  225.                                                 <godzinaDo>13:00:00</godzinaDo>
  226.                                                 <sala ref="3"/>
  227.                                                 <termin ref="5"/>
  228.                                                 <prowadzacy ref="68"/>
  229.                                         </spotkanie>
  230.                                         <spotkanie id="53">
  231.                                                 <data>2023-11-02</data>
  232.                                                 <godzinaOd>11:30:00</godzinaOd>
  233.                                                 <godzinaDo>13:00:00</godzinaDo>
  234.                                                 <sala ref="3"/>
  235.                                                 <termin ref="5"/>
  236.                                                 <prowadzacy ref="68"/>
  237.                                         </spotkanie>
  238.                                         <spotkanie id="54">
  239.                                                 <data>2023-10-19</data>
  240.                                                 <godzinaOd>11:30:00</godzinaOd>
  241.                                                 <godzinaDo>13:00:00</godzinaDo>
  242.                                                 <sala ref="3"/>
  243.                                                 <termin ref="5"/>
  244.                                                 <prowadzacy ref="68"/>
  245.                                         </spotkanie>
  246.                                         <spotkanie id="55">
  247.                                                 <data>2023-10-05</data>
  248.                                                 <godzinaOd>11:30:00</godzinaOd>
  249.                                                 <godzinaDo>13:00:00</godzinaDo>
  250.                                                 <sala ref="3"/>
  251.                                                 <termin ref="5"/>
  252.                                                 <prowadzacy ref="68"/>
  253.                                         </spotkanie>
  254.                                         <terminGrupy id="5">
  255.                                                 <czestotliwosc>co dwa tygodnie (parzyste)</czestotliwosc>
  256.                                                 <dzienTygodnia>3</dzienTygodnia>
  257.                                                 <godzinaOd>11:30:00</godzinaOd>
  258.                                                 <godzinaDo>13:00:00</godzinaDo>
  259.                                                 <sala ref="3"/>
  260.                                                 <uwagi/>
  261.                                                 <usosId>85900</usosId>
  262.                                         </terminGrupy>
  263.                                 </grupaZajeciowa>
  264.                         </przedmiot>
  265.                         <przedmiot id="9">
  266.                                 <nazwa>Emisja głosu</nazwa>
  267.                                 <kod>340-ON2-2EG</kod>
  268.                                 <jednostkaOrganizacyjna ref="992"/>
  269.                                 <grupaZajeciowa id="9">
  270.                                         <numer>1</numer>
  271.                                         <liczbaGodzin>30.0</liczbaGodzin>
  272.                                         <idZajec>228523</idZajec>
  273.                                         <typ>CW</typ>
  274.                                         <prowadzacy ref="199"/>
  275.                                 </grupaZajeciowa>
  276.                         </przedmiot>
  277.                         <przedmiot id="129">
  278.                                 <nazwa>Vademecum pracy redaktora</nazwa>
  279.                                 <kod>340-PS1-3VPR</kod>
  280.                                 <jednostkaOrganizacyjna ref="992"/>
  281.                                 <grupaZajeciowa id="135">
  282.                                         <numer>1</numer>
  283.                                         <liczbaGodzin>15.0</liczbaGodzin>
  284.                                         <idZajec>228774</idZajec>
  285.                                         <typ>CW</typ>
  286.                                         <prowadzacy ref="74"/>
  287.                                         <terminGrupy id="69">
  288.                                                 <czestotliwosc>co dwa tygodnie (parzyste)</czestotliwosc>
  289.                                                 <dzienTygodnia>3</dzienTygodnia>
  290.                                                 <godzinaOd>09:45:00</godzinaOd>
  291.                                                 <godzinaDo>11:15:00</godzinaDo>
  292.                                                 <sala ref="5"/>
  293.                                                 <uwagi/>
  294.                                                 <usosId>85931</usosId>
  295.                                         </terminGrupy>
  296.                                 </grupaZajeciowa>
  297.                         </przedmiot>   
  298.                 </cyklDydaktyczny>
  299.         </cykleDydaktyczne>
  300.         <wydarzenia/>
  301.         <zestawySal/>
  302. </plan>
  303.  

and I would like to write <godzinaOd> and <godzinaDo> from the <spotkanie> in the csv,

and ultimately for <prowadzacy ref> I would substitute the appropriate employee (<imie> and <nazwisko>) with <pracownicy><pracownik id> and the id number is equal to the ref number, and after <sala ref> substitute the appropriate <numer> from <budynki><budynek><sala id> (id=ref).

 

TinyPortal © 2005-2018