Lazarus i obsługa XML

0

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?

1

podpowiedz: <plan>

0

Dziękuję z podpowiedź😀
Tak jak pisałem jest to mój pierwszy kontakt z obsługą xml 😔
Czyli mam dodać .//plan/cykleDydaktyczne/cyklDydaktyczny ?

0

Po co używasz wszędzie przedrostków .//? Spróbuj normalnie, zaczynając od plan, ew. /plan.

1 użytkowników online, w tym zalogowanych: 0, gości: 1