Get Sorted Xml String
Zuletzt geändert: 14.03.2026 05:56

Get-SortedXmlString #

ÜBERSICHT #

Sortiert eine EULANDA-XML-Struktur logisch und gibt sie formatiert als String zurück.

SYNTAX #

Get-SortedXmlString [[-XmlString] <string>] [[-DocumentType] <string>] [-RemoveComments]
    [<CommonParameters>]

BESCHREIBUNG #

Diese Funktion nimmt einen XML-String mit einer EULANDA-konformen Struktur entgegen, analysiert die enthaltenen Elemente rekursiv und sortiert sie in einer logisch definierten Reihenfolge. Dabei werden u.a. folgende Regeln beachtet:

  • Innerhalb von : METADATA, FIRMENSTAMM, weitere Knoten alphabetisch, dann die *LISTE.
  • Innerhalb von *LISTE: Sortierung der POS-Elemente nach POSNUMMER.
  • In BANKLISTE und STEUERLISTE: numerische Sortierung nach ID bzw. MWSTSATZ.
  • Innerhalb von Elementen: Leaf-Nodes vor Non-Leaf-Nodes, sortiert nach Name.

Die Ausgabe ist ein formatiertes XML (UTF-8 ohne BOM), ideal für Datei-Export oder Anzeige.

PARAMETER #

-XmlString #

Type: string

Ein gültiger XML-String mit EULANDA-Datenstruktur.

-DocumentType #

Type: string

Der DocumentType (RECHNUNG, AUFTRAG, LIEFERSCHEIN, ANGEBOT usw.), der zur Steuerung der POS-Logik benötigt wird.

-RemoveComments #

Type: switch

Wenn gesetzt, werden alle XML-Kommentare aus der Ausgabe entfernt.

AUSGABEN #

string

Ein formatierter und logisch sortierter XML-String (UTF-8 ohne BOM).

BEISPIELE #

# Liest eine EULANDA-XML-Datei ein und speichert die Knoten sortiert zurück.
$XmlString = Get-Content -Raw -Path "auftrag.xml"
$sorted = Get-SortedXmlString -XmlString $XmlString -DocumentType "AUFTRAG"
[System.IO.File]::WriteAllText("auftrag-sorted.xml", $sorted, [System.Text.UTF8Encoding]::new($false))

HINWEISE #

  • Die Funktion verändert die Reihenfolge ursprüngliche Struktur z.B. bei POS- oder LISTE-Knoten.
  • Die Ausgabe entspricht der in den betreffenden XSD-Dateien enthaltenen Reihenfolgen.

To-Do:

  • Kommentare nach Sortierung vor die umsortierten Felder stellen (falls diese rechts daneben standen)
  • Kommentare vor Oberelementen belassen und ggf. mit verschieben
  • Option zum Entfernen aller Kommentare
  • Option zum Einfügen von Kommentaren anhand einer XSD
  • Zusatzparameter Anstatt XmlString auch XmlPath und Xml als Struktur erlauben
  • Optional neben XmlString Ausgabe auch XmlOutPath und XmlStruktur erlauben