Einzelnen Beitrag anzeigen

taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#1

XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 13:10
Bitte um Entschuldigung für die möglicherweise triviale Frage. Auch die Suche hier hat viele XML Ergebnisse geliefert aber nicht offensichtlich für mein Problem.
Ganz einfach:

Delphi-Quellcode:
  var
    XMLDoc: IXMLDocument;
    RootNode, ErrNode: IXMLNode;
    sXml: UTF8String;
  begin
    CoInitialize(Nil);
    Try
      XmlDoc:= NewXmlDocument;
      XmlDoc.Options:= [doNodeAutoIndent];
      XmlDoc.Active:= True;
      RootNode:= XMLDoc.AddChild('lpr:error', Format('http://%s/lpr',['127.0.0.1']));
      ErrNode:= XmlDoc.CreateElement('message','');
      ErrNode.NodeValue:= 'Dies ist ein Umlaut: ö.';
      RootNode.ChildNodes.Add(ErrNode);
      XMLDoc.Encoding:= 'utf-8';
      XmlDoc.SaveToXML(sXml);
    Finally
      CoUninitialize;
    End;
In sXml würde ich jetzt erwarten:

Code:
<?xml version="1.0" encoding="utf-8"?>
<lpr:error xmlns:lpr="http://127.0.0.1/lpr">
<message>Dies ist ein Umlaut: &ouml;.
</message>
</lpr:error>'
drin ist aber

Code:
<?xml version="1.0" encoding="utf-8"?>
<lpr:error xmlns:lpr="http://127.0.0.1/lpr">
<message>Dies ist ein Umlaut: ö.
</message>
</lpr:error>'
Was ein ungültiges XML bedeuted. Ich habe bisher nur haufenweise XML gelesen oder ohne Umlaute geschrieben.

Irgendwo habe ich noch das gefunden:

sXml:= TEncoding.UTF8.GetString(TEncoding.ANSI.GetBytes(string(XmlDoc.Xml.Text)));

Das wirft aber den Fehler: ---------------------------

Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt test.exe ist eine Exception der Klasse EEncodingError mit der Meldung 'Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden' aufgetreten.

Wo ist mein Denkfehler?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat