Test Validate Cxml
Zuletzt geändert: 14.03.2026 05:56

Test-ValidateCxml #

ÜBERSICHT #

Validiert eine Ariba cXML-Datei (ORDER, INVOICE oder andere cXML-Typen) gegen das passende XSD-Schema.

SYNTAX #

Test-ValidateCxml [-XmlPath] <string> [-Type] <string> [-XsdRoot] <string>

BESCHREIBUNG #

Die Funktion Test-ValidateCxml prüft eine einzelne cXML-Datei anhand eines oder mehrerer XSD-Dateien. Die XSD-Dateien werden abhängig vom Nachrichtentyp (ORDER, INVOICE, DESADV oder später weitere) aus getrennten Ordnern geladen. Die Funktion kann den Nachrichtentyp automatisch anhand der Struktur der XML-Datei erkennen.

Vor der Validierung wird ein Clean-File erzeugt, dessen DOCTYPE entfernt und das in UTF8 ohne BOM abgespeichert wird. Anschliessend wird ein SchemaSet geladen, bestehend aus allen XSD-Dateien des jeweiligen Nachrichtentyps. Die XML-Datei wird gegen dieses SchemaSet validiert.

Die Funktion gibt True zurück, wenn die Datei fehlerfrei ist, ansonsten False.

Hinweis zur Erstellung der XSD-Dateien #

Die XSD-Dateien wurden automatisch aus den originalen cXML-DTD-Dateien erzeugt. Dazu wird eine Java-Runtime sowie das Trang-Modul benötigt.

Benötigte Komponenten: #

Java Runtime (Temurin): https://github.com/adoptium/temurin25-binaries/

Trang (trang.jar): https://code.google.com/archive/p/jing-trang/downloads

Vorgehensweise (Beispiel): #

  1. DTD-Dateien in ein Arbeitsverzeichnis legen, z. B. C:\dtd.

  2. Java und trang.jar dort installieren bzw. ablegen.

  3. Die DTD-Dateien mit Trang in XSD umwandeln:

    java -jar C:\dtd\trang.jar C:\dtd\cXML.dtd C:\dtd\cXML.xsd java -jar C:\dtd\trang.jar C:\dtd\InvoiceDetail.dtd C:\dtd\InvoiceDetail.xsd

  4. Dadurch entstehen insgesamt fünf XSD-Dateien. Diese werden anschließend in zwei Ordner aufgeteilt und dupliziert: ORDER INVOICE

Ordnerstruktur: #

  • cXML.xsd gehört nur in den Ordner ORDER.
  • InvoiceDetail.xsd gehört nur in den Ordner INVOICE.
  • Alle übrigen XSD-Dateien werden in beide Ordner kopiert.

Damit entsteht eine Trennung zwischen ORDER- und INVOICE-Schemas, basierend auf derselben Quelle (DTD), aber mit den jeweils benötigten Hauptdateien. Das Vorgehen ist notwendig, da es ansonsten Kollisionen mit dem Namespace gibt.

PARAMETER #

-XmlPath #

Type: string
Mandatory: True

Vollständiger Pfad zur zu validierenden XML-Datei.

-Type #

Type: string
Default: 'AUTO'

OPTIONAL: Nachrichtentyp für die Validierung. Mögliche Werte:

  • ORDER
  • INVOICE
  • DESADV
  • PUNCHOUT
  • AUTO (Standard)

Bei AUTO wird der Nachrichtentyp automatisch anhand des Inhalts der XML-Datei ermittelt. Falls der Nachrichtentyp nicht erkannt wird, gibt die Funktion einen Fehler zurück.

-XsdRoot #

Type: string

Wurzelpfad, unter dem sich die Unterordner für die XSD-Dateien befinden. Der Pfad muss Unterordner enthalten wie: XSD\ORDER*.xsd XSD\INVOICE*.xsd XSD\DESADV*.xsd usw.

AUSGABEN #

System.Boolean

True bei gültiger XML, ansonsten False.

BEISPIELE #

# Order mit festem Typ prüfen
Test-ValidateCxml `
  -XmlPath "C:\ARIBA\ORDER\5040152674\5040152674.xml" `
  -Type ORDER `
  -XsdRoot "C:\ARIBA\XSD"
# Order automatisch erkennen und prüfen
Test-ValidateCxml `
  -XmlPath "C:\ARIBA\ORDER\5040152674\5040152674.xml" `
  -XsdRoot "C:\ARIBA\XSD"
# Invoice explizit prüfen
Test-ValidateCxml `
  -XmlPath "C:\ARIBA\INVOICE\25107157\25107157.xml" `
  -Type INVOICE `
  -XsdRoot "C:\ARIBA\XSD"
# Invoice automatisch erkennen und prüfen
Test-ValidateCxml `
  -XmlPath "C:\ARIBA\INVOICE\25107157\25107157.xml" `
  -XsdRoot "C:\ARIBA\XSD"

HINWEISE #

  • PowerShell 5.1 kompatibel
  • UTF8 ohne BOM für Clean-Datei
  • Keine Set-Content oder Out-File Encoding-Fallen
  • Sicherer XmlReader ohne Endlosschleifen
  • Voll modular für weitere cXML-Typen