CC: XML - Präfix im Root-Element & Einzeilerproblem

21. Dezember 2018 11:33

Moin zusammen,

erst einmal zum Hintergrund meines Posts:

Ich muss ein (riiiesiges) XML erstellen, welches aus einer gebuchten Rechnung erstellt wird. Da dies nahe liegt, habe ich mir hierfür erstmal einen XMLport geschnappt, und meine Anforderung damit umgesetzt. Nachdem ich fertig war und das XML getestet habe, erfahre ich, dass es keine leeren Elemente enthalten darf. Daraufhin habe ich hier im Forum gelesen, dass diese (Nach-)Forderung mit einem XMLport gar nicht umsetzbar ist.

Jetzt habe ich angefangen, das XML neu mit MSXML zu erstellen. Prinzipiell komme ich hier gut voran, aber bevor ich jetzt hier wieder unzählige Stunden investiere und nachher wieder erfahren muss, dass es nicht umsetzbar ist, schildere ich also meine aktuellen beiden Probleme, zu denen ich nichts im Forum und auch nicht im www finde:

- 1. -
Das Root-Element muss ein vorangegangenes Präfix 'p' enthalten. Dieses hat sich im XMLport problemlos umsetzen lassen. Über MSXML erhalte ich allerdings die Fehlermeldung: Verweis auf ein nicht deklariertes Namespace-Präfix: 'p'
Code:
IF ISCLEAR(XMLDocOut) THEN
  CREATE(XMLDocOut, TRUE);

XMLDocOut.async            := FALSE;
XMLDocOut.validateOnParse  := FALSE;
XMLDocOut.resolveExternals := FALSE;

XMLDocOut.loadXML('<?xml version="1.0" encoding="UTF-8" ?>' +
                  '<p:FatturaElettronica></p:FatturaElettronica>');

IF XMLDocOut.xml = '' THEN BEGIN
  ERROR(XMLDocOut.parseError.reason +
        '\' +
        'Die XML-Datei wurde nicht geschrieben!');
END;


Es sollte also nachher wie folgt aussehen:
Code:
<?xml version="1.0" encoding="UTF-8" ?>
<p:FatturaElettronica>
    <xxx>
        <yyy>...</yyy>
    </xxx>
</p:FatturaElettronica>

Bekomme ich das irgendwie hin, ohne das XML-File im nachhinein mit file und string operations so zu bearbeiten, dass das fehlende 'p:' im Root-Element gesetzt wird? :-(


- 2. -
Mein oben genanntes XML wird im Editor nur als Einzeiler, im IExplorer allerdings in korrekter XML-Struktur dargestellt. Was muss ich machen, dass mir auch Notepad++ und andere Editoren das XML vernünftig darstellen :?:


Man möge mir meine vllt. bescheuterten Fragen entschuldigen, aber ich bin weder ein XML-Guru noch habe ich größere Erfahrungen mit MSXML. Mit XMLports kann ich gerade so umgehen! :-?

Re: CC: XML - Präfix im Root-Element & Einzeilerproblem

21. Dezember 2018 11:51

Hallo,

zu 1. du solltest dich mal mit den Stichworten XMLNameTable und XMLNameSpaceManager auseinandersetzen.

zu 2. für Notepad++ gibt es eine Erweiterung "XML Tools". Dort gibt es die Funktion "Pretty print (...with Line Breaks)". Damit sieht die XML lesbarer aus.

Gruß Fiddi

Re: CC: XML - Präfix im Root-Element & Einzeilerproblem

21. Dezember 2018 13:02

Hallo Fiddi,

danke für deine Antworten.

Aber beide bringen mich nicht wirklich weiter.

zu 1. weiß ich nicht, wie ein Studium der beiden von dir genannten Stichworten mich in NAV weiter bringen. ich hätte jetzt gedacht, dass es durch Übergabe von Parametern oder properties im XMLDocOut eine Deklaration für Präfixe möglich macht.

zu 2. da habe ich mich vllt. etwas falsch ausgedrückt. es geht mir weniger darum, dass es in einer Zeile dargestellt wird, sondern vielmehr tatsächlich so erstellt wird. ich hätte gerne, dass das file gleich korrekt mit CRLF und Tabs erstellt wird. wenn ich das XML über den XMLport erstelle, dann wird es (auch ohne das XML plugin in Notepad++) in einer vernünftigen Struktur dargestellt - ebenso im ganz simplen Editor - weil es gleich in dieser Struktur erstellt wurde. es muss doch irgend eine Einstellung geben, mit welcher man via MSXML das auf gleiche Weise hinbekommt wie der XMLport, oder nicht?

Any other suggestions?

Re: CC: XML - Präfix im Root-Element & Einzeilerproblem

21. Dezember 2018 13:36

Hallo,

zu 1: die beiden benötigst du um die Namespaces bzw. die daraus entstandene XMLNameTable dem XML-Doc schon beim Aufruf des Konstruktors hinzuzufügen, damit das XML- Dokument damit umgehen kann.

zu 2: CLRFs haben im XML keine Bedeutung, sie werden einfach überlesen. Wenn du dir das nur lesbar anschauen möchtest, kannst du den Internet- Explorer zum anschauen benutzen, der sollte auch den Einzeiler lesbar anzeigen.

Gruß Fiddi