xml Datei effektiv erstellen?

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Benutzeravatar
KoBraSoft
Beiträge: 123
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

xml Datei effektiv erstellen?

Beitrag von KoBraSoft »

Hallo,
wie lässt sich mit Lazarus effektiv eine xml Datei erstellen?
Wie erstellt Ihr xml Dateien?

Ich habe intensiv gesucht und zwei brauchbare Varianten gefunden:
  • 1. DOM, XMLWrite
    Ist Teil von Lazarus/fpc, aber umständlich.
  • 2. XML Builder https://github.com/viniciussanchez/xml-builder
    Schon besser, aber
    • ich kann damit keinem Element ein Attribut zuweisen:
      <udt:DateTimeString format="102">20241221</udt:DateTimeString> geht damit nicht
    • die Funktion "Adapter" geht in die richtige Richtung ist aber leider sehr rudimentär
    • die erzeugte xml schwer lesbar, alles in einer Zeile
Ich habe ein Beispielprojekt mit beiden Varianten angehängt.
ZUGFeRD1.zip
(137.31 KiB) 101-mal heruntergeladen
Hintergrund:
Ich möchte eine Xrechnung im Format CII (CrossIndustryInvoice) aus einer Datenbank mit Lazarus erstellen. Es sollen nur die Pflichtangaben (nach §14 UstG) verarbeitet werden. Die Lösung soll so einfach wie möglich sein (K.I.S.S. Prinzip) .

Später will ich die XRechnung in pdfs einbinden (Zugferd).

Ich habe hier https://www.ferd-net.de/publikationen-p ... 32-deutsch die Spezifikationen und Beispiele gefunden.

Leider ist die XRechnung eine xml Datei. Ich mag xml nicht besonders. xml ist aufgeblasen (unnötg viel nutzloser Text), der in XRechnung noch mehr aufgeblasen wird.
Konrad

www.KoBraSoft.de

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: xml Datei effektiv erstellen?

Beitrag von Mathias »

Ich habe ein Beispielprojekt mit beiden Varianten angehängt.
Leider hast du die *.lpi vergessen reinzunehmen.
Wie erstellt Ihr xml Dateien?
Ich mache es ist in der Regel mit Laz2_XMLCfg, dies ist sehr einfach in der Handhabung.
Dies funktioniert aber nur gut, wen der Aufbau einer Konfigurationsdatei entspricht.
Da brauch man das ganze Noden Zeugs nicht.
Erst wen man Zeilen wie folgende hat, muss man auf die komplexen Varianten zugreifen.

Code: Alles auswählen

<child>And this is the second one.</child>
Hier die beiden letzen 2 Functionen zeigen wie dies mit einer einfachen StringListe geht.
https://github.com/sechshelme/Lazarus-G ... istbox.pas
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
KoBraSoft
Beiträge: 123
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: xml Datei effektiv erstellen?

Beitrag von KoBraSoft »

Mathias hat geschrieben: Di 24. Dez 2024, 08:51 Leider hast du die *.lpi vergessen reinzunehmen.
sorry
ZUGFeRD1.zip
(138.11 KiB) 125-mal heruntergeladen
Konrad

www.KoBraSoft.de

kirchfritz
Beiträge: 214
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: xml Datei effektiv erstellen?

Beitrag von kirchfritz »

Das hier habe ich in der Readme-Datei vom XML-Builder gefunden:
XML-Builder-Readme.png
XML-Builder-Readme.png (41.5 KiB) 8886 mal betrachtet
Dort wird offensichtlicherweise dem XML-Knoten "developer" das Attribute "mvp=true" hinzugefügt.

Benutzeravatar
KoBraSoft
Beiträge: 123
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: xml Datei effektiv erstellen?

Beitrag von KoBraSoft »

kirchfritz hat geschrieben: Di 24. Dez 2024, 12:53 Dort wird offensichtlicherweise dem XML-Knoten "developer" das Attribute "mvp=true" hinzugefügt.
Ja das geht, aber ich bräuchte (um in diesem Beispiel zu bleiben) ein Attribut im Element "lastName"
<lastName format="xxx"> Sanchez</lastName>
Konrad

www.KoBraSoft.de

Benutzeravatar
KoBraSoft
Beiträge: 123
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: xml Datei effektiv erstellen?

Beitrag von KoBraSoft »

Mathias hat geschrieben: Di 24. Dez 2024, 08:51 Ich mache es ist in der Regel mit Laz2_XMLCfg, dies ist sehr einfach in der Handhabung.
Dies funktioniert aber nur gut, wen der Aufbau einer Konfigurationsdatei entspricht.
Da brauch man das ganze Noden Zeugs nicht.
Leider entspricht die XRechnung so gar nicht einer Konfigurationsdatei.
Ich habe mir das Laz2_XMLCfg angesehen. Es gibt vier verschiedene Prozeduren "SetValue", keiner davon kann man ein (xml)Attribut übergeben.
Meine bescheidenen Programmierkenntnisse reichen leider nicht, um Laz2_XMLCfg soweit aufzubohren, dass ich es verwenden könnte.
Konrad

www.KoBraSoft.de

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 359
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: xml Datei effektiv erstellen?

Beitrag von Jorg3000 »

Hi Konrad!
Du schreibst dass du XRechnung aus einer Datenbank erstellst. Heißt dass, dass du gar kein XML liest, sondern nur schreibst?
Dann erstell den XML-Text doch einfach aus Strings selber. Wenn man es nicht vorher einliest, würde ich auf einen XML-DOM verzichten.

Und falls man später doch mal vorhandenes XML manipulieren muss, kann man so ein Programm recht leicht auf DOM umstellen.
Grüße, Jörg

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: xml Datei effektiv erstellen?

Beitrag von Mathias »

Leider entspricht die XRechnung so gar nicht einer Konfigurationsdatei.
Wen ich dich richtig verstehe, willst du aus den XRechnungen eine xml-Datei erzeugen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
KoBraSoft
Beiträge: 123
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: xml Datei effektiv erstellen?

Beitrag von KoBraSoft »

Jorg3000 hat geschrieben: Di 24. Dez 2024, 16:05 Hi Konrad!
Du schreibst dass du XRechnung aus einer Datenbank erstellst. Heißt dass, dass du gar kein XML liest, sondern nur schreibst?
Ja richtig
Dann erstell den XML-Text doch einfach aus Strings selber. Wenn man es nicht vorher einliest, würde ich auf einen XML-DOM verzichten.
Daran habe ich auch schon gedacht. Ich könnte statt der Werte (die bei xml nur strings sind) Platzhalter einbauen und im Programm mit Werten aus der DB ersetzen.
Mir fällt gerade noch etwas ein:
Ich könnte die selbsterstellte Musterdatei beim Programmstart in ein TXMLDocument einlesen und mit FindNode die Knoten bearbeiten die Werte enthalten. Idealerweise könnte ich ggf die Musterdatei als Ressource im Programm mit geben. Das hätte den Vorteil dass ich meiner Anwendung keine zusätzliche Datei mitgeben muss.
Zuletzt geändert von KoBraSoft am Di 24. Dez 2024, 17:19, insgesamt 1-mal geändert.
Konrad

www.KoBraSoft.de

Benutzeravatar
KoBraSoft
Beiträge: 123
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: xml Datei effektiv erstellen?

Beitrag von KoBraSoft »

Mathias hat geschrieben: Di 24. Dez 2024, 16:46
Leider entspricht die XRechnung so gar nicht einer Konfigurationsdatei.
Wen ich dich richtig verstehe, willst du aus den XRechnungen eine xml-Datei erzeugen ?
Nein, XRechnungen sind xml-Dateien
Konrad

www.KoBraSoft.de

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: xml Datei effektiv erstellen?

Beitrag von Mathias »

Nein, XRechnungen sind xml-Dateien
Darf man da rein schauen, das hilft einiges weiter.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
KoBraSoft
Beiträge: 123
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: die zu Zeit aktuellen Versionen, überwiegend Linux
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: xml Datei effektiv erstellen?

Beitrag von KoBraSoft »

Mathias hat geschrieben: Di 24. Dez 2024, 20:12 Darf man da rein schauen, das hilft einiges weiter.
Guten Morgen Mathias,
soweit ich sehe wohnst Du der Schweiz. Ich habe keine Informationen, ob in der Schweiz E Rechnungen Pflicht sind oder Pflicht werden oder eben auch nicht.
Im letzteren Fall sage ich: "Felix Helvetia"
Hier ein kurze Zusammenfassung wie ich die Sache sehe:
Der Begriff "E Rechnung" wurde im Wachstumschancengesetz eingeführt. Diesen Gesetz ist ein Sammelsurium von Änderungen von allerlei verschiedenen Gesetzen und Verordnungen. Hier nachzulesen:https://www.recht.bund.de/bgbl/1/2024/108/VO.html. Schon in der Inhaltsübersicht erkennt man dass das Gesetz durch viele Gesetze und Verordnungen pflügt.
Dieses Gesetz ist, meiner Ansicht nach, ein gut gemachtes trojanisches Pferd. Der Hauptzweck der dort verpflichtend eingeführten E Rechnung ist nicht etwa, eine Kosteneinsparung in den Unternehmen, sondern die Grundsteinlegung zur Automatisation der Steuerprüfungen in den Unternehmen.
Hier: https://www.bundesfinanzministerium.de/ ... k-435598-1sind weitere Informationen aus Sicht des Bundesfinanzministeriums der damaligen Ampelregierung.
Die technischen Details einer E Rechnung stehen in der DIN EN16931 https://www.din.de/de/meta/suche/62730! ... btn=Submit die kostenpflichtig ist.
Hier: https://www.ferd-net.de/publikationen-p ... 32-deutsch sind (wie ich im Einganspost bereits geschrieben habe) die notwendigen Informationen auch zu finden.

Zusammengefasst ist eine E Rechnung eine Datei im XRechnungsformat Universal Business Language (UBL) oder Cross Industry Invoice (CII) oder Zugferd
UBL und CII sind xml Dateien.
Zugferd ist eine pdf mit eingebettem CII.

Zu deiner Frage: "Darf man da rein schauen?"
Ja, darf man. Hier zum Beispiel:https://github.com/ConnectingEurope/eIn ... i/examples
Konrad

www.KoBraSoft.de

kirchfritz
Beiträge: 214
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: xml Datei effektiv erstellen?

Beitrag von kirchfritz »

Hallo,

ich habe mir erlaubt, den Quellcode von XMLBuilder zu manipulieren.
dort habe ich eine neue Methode AddNodeText implementiert.
Damit konnten die Anforderungen einen XML-Knoten mit Text und mit Attribut zu versehen, umgesetzt werden.
Du kannst alles im Quellcode nachvollziehen.
Das Thema "XML als unerwünschte einzeilige Zeichenkette" habe ich so nebenbei miterledigt.

ZIP-Datei im Anhang
Screenshot 2024-12-25 130220.png
Screenshot 2024-12-25 130220.png (63.31 KiB) 8720 mal betrachtet
Schöne Weihnachten
Fritz
Dateianhänge
zugferdGenerator2.zip
(144.79 KiB) 124-mal heruntergeladen

kirchfritz
Beiträge: 214
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: xml Datei effektiv erstellen?

Beitrag von kirchfritz »

Dein Vorhaben, das XRechnungs-XML als Text mit Platzhaltern vorzuhalten, und dann nur die Platzhalter zu ersetzen, klingt zwar einfach und gut.
Ich schätze aber, dass Du Probleme bekommst, wenn die XRechnung eine variable Anzahl von Rechnungspositionen enthalten soll.
Dann ist schnell Schluss mit Platzhaltern, die der Einfachheit halber ersetzt werden.

Fritz

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: xml Datei effektiv erstellen?

Beitrag von Mathias »

Zu deiner Frage: "Darf man da rein schauen?"
Ja, darf man. Hier zum Beispiel:https://github.com/ConnectingEurope/eIn ... i/examples
Ich habe mir die XML angeguckt, es sehe einfach, das es ":" in den Key hat. Ansonsten sehe ich nichts außergewöhnliches, das es mit XMLConfig nicht gehen soll.

Guten Morgen Mathias,
soweit ich sehe wohnst Du der Schweiz. Ich habe keine Informationen, ob in der Schweiz E Rechnungen Pflicht sind oder Pflicht werden oder eben auch nicht.
Im letzteren Fall sage ich: "Felix Helvetia"
Es ist Offtopic.
Mich interessiert diese Gesetzt eigentlich nicht, blechen muss man die Rechnungen so oder so.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten