22. Juni 2021 08:58
Ich habe einen XmlPort erstellt, bei dem ich einen Knoten habe mit dem Node Type = Element und dem SourceType = Text. Der Text, der in diesem Knoten enthalten ist, enthält einen Zeilenumbruch (CR LF). Wenn ich vor dem Import den gesamten XML-Text ausgebe per Message, ist der Zeilenumbruch auch da. Aber im Import::OnAfterAssignVariable - Trigger des o.g. Knotens scheint der verschwunden zu sein.
LösungProperty "PreserveWhiteSpace" im XMLPort auf "Yes" setzen. (Globale Property, nicht Feld-bezogen)Ursprüngliche Problembeschreibung:
Folgende Test-Funktion führt zu "nichts erkannt":
- Code:
LOCAL ReplaceCrLfWithBr(ParText : Text) ReturnText : Text
LF := 10;
CR := 13;
CarriageReturn := FORMAT(CR) + FORMAT(LF);
IF STRPOS(ParText, FORMAT(CR)) <> 0 THEN BEGIN
ERROR('Carriage Return erkannt');
END ELSE IF STRPOS(ParText, FORMAT(LF)) <> 0 THEN BEGIN
ERROR('Line Feed erkannt');
END ELSE BEGIN
ERROR('nichts erkannt');
END;
Auch wenn ich den Wert des o.g. Knotens direkt im o.g. Trigger per Error ausgebe, ist kein Zeilenumbruch mehr enthalten. Schmeißen XML-Ports die Zeilenumbrüche beim Import einfach weg?
Ich würde es jetzt mal damit versuchen, dass ich ein "CDATA" in der XML einfüge für den o.g. Knoten direkt nach dem Download, bevor ich die XML in den XMLPort kippe. Gibt es dafür evtl. eine elegantere Lösung?
(ich musste auch schon das Attribut "xml:lang" vor der Verarbeitung durch "xmllang" ersetzen, weil XmlPorts nicht mit Doppelpunkten in Attributsbezeichnungen klar kommen
. Ich bin echt kein Fan von XmlPorts, das ist wieder sowas halbgar drangeflanschtes, ähnlich wie RDLC.)
Update - selbst mit CDATA gehts nicht
- Code:
<KNOTEN_TEXT>
<VALUE xml:lang="x-default"><![CDATA[Test vor Absatz.
Das ist ein Test nach einem Absatz]]></VALUE>
<VALUE xml:lang="x-bmde"><![CDATA[Test vor Absatz.
Das ist ein Test nach einem Absatz]]></VALUE>
</KNOTEN_TEXT>
Zuletzt geändert von InfoWissler am 23. Juni 2021 11:15, insgesamt 1-mal geändert.