Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   himXML speichern mit BOM (https://www.delphipraxis.net/209999-himxml-speichern-mit-bom.html)

haentschman 16. Feb 2022 08:29


himXML speichern mit BOM
 
Hallöle...8-)

Mein XML (Encoding: UTF-8) soll mal ein BOM bekommen...
Delphi-Quellcode:
XML.SaveToFile(Name)
In den Options ist "xoDontWriteBOM" nicht angegeben. (Standard) Die Datei hat aber kein BOM. :?

Header der gespeicherten Datei:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Messages>
  <Message>
himXML.pas:
Delphi-Quellcode:
Procedure TXWriter.WriteBOM(AllowUTF8BOM: Boolean = False);
  Begin
    If (XMLEncodingData[_Encoding].BOM > '') and (xoDontWriteBOM in _Options)
        and ((_Encoding <> xeUTF8) or AllowUTF8BOM) Then Begin
        Flush;
        _Stream.WriteBuffer(XMLEncodingData[_Encoding].BOM[1],
        Length(XMLEncodingData[_Encoding].BOM));
     End;
   End;
Delphi-Quellcode:
and (xoDontWriteBOM in _Options)
damit kann er nie den BOM schreiben? Oder? :gruebel:

Was muß ich einstellen?

Danke...

Blup 16. Feb 2022 12:43

AW: himXML speichern mit BOM
 
Also vom Ablauf her müsste an dieser Stelle die Option mit "xoWriteBOM" benannt werden.
Das ist auch kürzer und für den menschlichen Verstand einfacher zu erfassen als negierte Aussagen.

Wenn man die Optionen ändert, müssten natürlich alle Stellen geprüft werden, die davon abhängen.
Insbesondere auch die Vorbelegung der Option.

Ich würde in der Methode mit einer Zwischenvariable arbeiten, was übersichtlicher ist:
Delphi-Quellcode:
if (xoWriteBOM in _Options) and (_Encoding <> xeUTF8) or AllowUTF8BOM) then
begin
  sBuffer := XMLEncodingData[_Encoding].BOM;
  if Length(sBuffer) > 0 then
    _Stream.WriteBuffer(sBuffer[1], Length(sBuffer));
end;

Rolf Frei 16. Feb 2022 12:58

AW: himXML speichern mit BOM
 
Ja ich würde auch sagen, dass da noch ein not davor hin gehört. Also:

Delphi-Quellcode:
Procedure TXWriter.WriteBOM(AllowUTF8BOM: Boolean = False);
  Begin
    If (XMLEncodingData[_Encoding].BOM > '') and not (xoDontWriteBOM in _Options)
        and ((_Encoding <> xeUTF8) or AllowUTF8BOM) Then Begin
        Flush;
        _Stream.WriteBuffer(XMLEncodingData[_Encoding].BOM[1],
        Length(XMLEncodingData[_Encoding].BOM));
     End;
   End;

haentschman 16. Feb 2022 13:12

AW: himXML speichern mit BOM
 
Danke...:wink:
Zitat:

Ja ich würde auch sagen, dass da noch ein not davor hin gehört
Ich habe auch versucht die Option in Option hinzufügen. Gleiches Ergebnis.

An die procedure habe ich versucht Breakpoints zu setzen...egal was ich gemacht habe...immer X as wäre die procedure nie in Verwendung. Auch ins Projekt aufgenommen. :?

:gruebel:

Warten wir mal, was der Verursacher dazu meint...:zwinker:

haentschman 17. Feb 2022 10:00

AW: himXML speichern mit BOM
 
Hallöle...:wink:

@himitsu: Ist dein Postfach voll? :wink: Keine Antwort auf meine PN? :wink:

himitsu 17. Feb 2022 14:30

AW: himXML speichern mit BOM
 
joar :vernupft:

muß mir später mal in Ruhe ansehn.

haentschman 17. Feb 2022 14:38

AW: himXML speichern mit BOM
 
Danke...8-)

haentschman 18. Feb 2022 15:54

AW: himXML speichern mit BOM
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöle...8-)

Änderungen:
* BOM ist nun auch bei UTF8 Standard.
* wenn BOM nicht benötigt:
Delphi-Quellcode:
XML.Options := XML.Options + [xoDontWriteBOM];
...
Änderungen in himXML.pas ab Zeile 11817:
Delphi-Quellcode:
Procedure TXWriter.WriteBOM;
  Begin
    If (XMLEncodingData[_Encoding].BOM > '') and (not(xoDontWriteBOM in _Options)) Then Begin
      Flush;
      _Stream.WriteBuffer(XMLEncodingData[_Encoding].BOM[1],
        Length(XMLEncodingData[_Encoding].BOM));
      End;
    End;
PS: (AllowUTF8BOM: Boolean = False); wurde nie gesetzt...immer False. :zwinker:

...bitteschön. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz