To mój pierwszy kontakt z obsługą XML i mam pewien problem. Mój plik wejściowy XML wygląda następująco:
<?xml version="1.0" encoding="utf-8"?>
<plan>
<jednostkiOrganizacyjne/>
<cykleDydaktyczne>
<cyklDydaktyczny>
<kod>2023</kod>
<przedmiot id="7">
<kod>340-RK1-1PNN</kod>
</przedmiot>
<przedmiot id="8">
<kod>340-PS1-2LNN</kod>
<grupaZajeciowa id="7">
<liczbaGodzin>30.0</liczbaGodzin>
<spotkanie id="40">
<data>2024-01-18</data>
</spotkanie>
<spotkanie id="41">
<data>2023-12-21</data>
</spotkanie>
<spotkanie id="42">
<data>2023-12-07</data>
</spotkanie>
<spotkanie id="43">
<data>2023-11-23</data>
</spotkanie>
<spotkanie id="44">
<data>2023-11-09</data>
</spotkanie>
<spotkanie id="45">
<data>2023-10-26</data>
</spotkanie>
<spotkanie id="46">
<data>2023-10-12</data>
</spotkanie>
</grupaZajeciowa>
<grupaZajeciowa id="8">
<liczbaGodzin>30.0</liczbaGodzin>
<spotkanie id="48">
<data>2024-01-25</data>
</spotkanie>
<spotkanie id="49">
<data>2024-01-11</data>
</spotkanie>
</grupaZajeciowa>
</przedmiot>
<przedmiot id="9">
<kod>340-ON2-2EG</kod>
<grupaZajeciowa id="9">
<liczbaGodzin>30.0</liczbaGodzin>
</grupaZajeciowa>
</przedmiot>
<przedmiot id="129">
<kod>340-PS1-3VPR</kod>
<grupaZajeciowa id="135">
<liczbaGodzin>15.0</liczbaGodzin>
</grupaZajeciowa>
</przedmiot>
</cyklDydaktyczny>
</cykleDydaktyczne>
</plan>
natomiast program w Lazarus-ie:
program project2test;
{$mode objfpc}{$H+}
uses
SysUtils, laz2_DOM, laz2_XMLRead, laz2_XMLWrite;
procedure ProcessXMLtoCSV(inputFileName, outputFileName: string);
var
XMLDocument: TXMLDocument;
RootNode, CykleNode, PrzedmiotNode, GrupaNode, SpotkanieNode: TDOMNode;
CSVFile: TextFile;
begin
// Initialization of the XML document
ReadXMLFile(XMLDocument, inputFileName);
RootNode := XMLDocument.DocumentElement;
// Opening the CSV file for writing
AssignFile(CSVFile, outputFileName);
Rewrite(CSVFile);
try
// Processing cykleDydaktycznych
CykleNode := RootNode.FindNode('.//cykleDydaktyczne/cyklDydaktyczny');
while Assigned(CykleNode) do
begin
// Processing przedmiot
PrzedmiotNode := CykleNode.FindNode('.//przedmiot');
while Assigned(PrzedmiotNode) do
begin
// Processing grupaZajęciowa
GrupaNode := PrzedmiotNode.FindNode('.//grupaZajeciowa');
while Assigned(GrupaNode) do
begin
// Processing spotkanie
SpotkanieNode := GrupaNode.FindNode('.//spotkanie');
while Assigned(SpotkanieNode) do
begin
// Geting data
Write(CSVFile, GrupaNode.FindNode('liczbaGodzin').TextContent, #9);
Write(CSVFile, PrzedmiotNode.Attributes.GetNamedItem('kod').NodeValue, #9);
Write(CSVFile, SpotkanieNode.FindNode('data').TextContent, #9);
Writeln(CSVFile);
SpotkanieNode := SpotkanieNode.NextSibling;
end;
GrupaNode := GrupaNode.NextSibling;
end;
PrzedmiotNode := PrzedmiotNode.NextSibling;
end;
CykleNode := CykleNode.NextSibling;
end;
finally
CloseFile(CSVFile);
end;
end;
begin
try
ProcessXMLtoCSV('plan3.xml', 'plan.csv');
Writeln('The CSV file has been generated.');
except
on E: Exception do
Writeln('An error occured: ', E.Message);
end;
end.
Niestety program nic nie znajduje, a plik csv jest pusty.
Gdzie jest mój błąd?