AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi MSXML speichert mit tabs statt mit XMLDocument.NodeIndentStr
Thema durchsuchen
Ansicht
Themen-Optionen

MSXML speichert mit tabs statt mit XMLDocument.NodeIndentStr

Offene Frage von "hbProgit"
Ein Thema von hbProgit · begonnen am 13. Sep 2005 · letzter Beitrag vom 14. Sep 2005
Antwort Antwort
hbProgit

Registriert seit: 13. Sep 2005
3 Beiträge
 
#1

MSXML speichert mit tabs statt mit XMLDocument.NodeIndentStr

  Alt 13. Sep 2005, 20:06
Hallo Leute,

bitte Nachsicht: habe noch nicht viel mit XML gemacht ...
Umgebung: D6Pro Update pack2 auf W2KSP4

Das Problem ist folgendes: beim Speichern wird das XML-Dokument immer mit einer TAB-Einrückung formatiert. Es soll aber immer mit 3 Leerzeichen eingerückt werden.

Es wird SaveToFile()zum SPeichern verwendet.

Ich habe im Archiv auch schon dieses gefunden:
======
XMLnode.AppendChild(XMLdoc.CreateTextNode(#13#10#0 9#09));
=======

und:
======
XMLDocument.Options := XMLDocument.Options + [doNodeAutoIndent];
..
Du hast überlesen, dass es um MS-XML 4 geht. Und da gibt´s das nicht.
======
Na ja: die Eigenschaft NodeIndentStr kann sowohl im ObjektInspektor als auch im Source gesetzt werden.
"Und da gibt´s das nicht" scheint wohl richtig zu sein, da auch das Setzen von doNodeAutoIndent:=false keinerlei Wirkung zu zeigen.
Ist es einfacher, OpenXML zu verwenden? Welche Unterschiede - im Wesentlichen - gibt es da?

Das grundlegende Problem mit OpenXML ist, dass ich die Unit "oxmldom" nicht habe

Bin für alle Tips dankbar - besonders die, die helfen

Gruß
Helmut
  Mit Zitat antworten Zitat
hbProgit

Registriert seit: 13. Sep 2005
3 Beiträge
 
#2

Re: MSXML speichert mit tabs statt mit XMLDocument.NodeInden

  Alt 14. Sep 2005, 13:35
Hallo Leute,

nach den vielen Hinweisen hier habe ich erstmal nach dem "Open XML" im Web gesucht - und eine gleichnamige "Komponente" von Dieter Köhler gefunden.
Nach der Installation zeigt sich, dass diese nichts mit der oxmldom.pas von Borland zu tun hat.
Leider komme ich damit erstmal nicht weiter (o.k.: die XDOM lib ist damit schon mal von 2.4 auf 3.1 aktualisiert), wenn ich jetzt nicht das ganze Programm neu schreibe.
Ist aber wohl ein wenig viel Aufwand, NUR weil dieses msxmldom immer tabs als Einrückung verwendet.

Vielleicht kennt sich ja doch noch jemand mit XML aus hier???

Gruß
Helmut
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: MSXML speichert mit tabs statt mit XMLDocument.NodeInden

  Alt 14. Sep 2005, 13:45
Hallo Helmut,

die Steuerung von white space / indentation in deinem XML-Dokument ist ein haariges Geschäft, das du besser XSL-T überlassen solltest. Die Einrückung ist ja wohl nur für die Ausgabe des raw codes von Interesse. Da möchte ich dann aber schon ein bischen mehr als nur Indentation. Oder hast du eine andere Motivation?

Grüße vom marabu
  Mit Zitat antworten Zitat
hbProgit

Registriert seit: 13. Sep 2005
3 Beiträge
 
#4

Re: MSXML speichert mit tabs statt mit XMLDocument.NodeInden

  Alt 14. Sep 2005, 14:34
Hallo marabu!

es geht um ein Tool (!) für XML- (nicht XSL)Dateien. Diese werden von einer Anwendung generiert. Da gilt es, nicht an der Formatierung zu wurschteln. Es soll nur eine sichere (!) Option über dieses Tool zum Ändern von einzelnen NodeValues oder NodeAttributes geben.

Jetzt sind die Original-Dateien mit einer Einrückung von je 3 Leerzeichen pro Ebene vorgegeben.

Beim Speichern mit XMLDocument.saveToFile() und der MSXML werden diese Leerzeichen komplett durch tabs ersetzt.

Erste Tests haben gezeigt, dass es der Anwendung keine Probleme bereitet, wenn tabs statt Leerzeichen verwendet werden. Allerdings kann ich das nicht auf allen Systemen testen: die Anwendung ist in Java geschrieben und läuft neben NT auch auf Sun, Aix, Linux, HP.
Früher wurden die Dateien Server-seitig sogar völlig unformatiert geschrieben. Ich denke mal, es wird schon gehen - will aber lieber auf Nummer sicher gehen.

Da die Komponente TXMLDocument ja schon diese Eigenschaft NodeIndentStr hat, fände ich es ganz praktisch, wenn die auch verwendbar wäre.
Die für D6Pro aktualisierte Hilfe dazu sagt jedenfalls nicht, dass diese Eigenschaft nicht bei MSXML verwendet wird.

Gruß
Helmut
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: MSXML speichert mit tabs statt mit XMLDocument.NodeInden

  Alt 14. Sep 2005, 16:53
Hallo Helmut,

beim MS XML Parser kannst du die TAB substitution so verhindern:

(1) dem documentElement musst du das attribute xml:space="preserve" verpassen:

Code:
<?xml version="1.0" encoding="iso8859-1"?>
<root xml:space="preserve">
...
</root>
(2) vor dem Laden musst du die white space preservation einschalten:

Delphi-Quellcode:
procedure TDemoForm.DemoButtonClick(Sender: TObject);
var
  i: integer;
  doc: IXMLDOMDocument2;
  nl: IXMLDOMNodeList;
  e: IXMLDOMElement;
begin
  doc := CoDomDocument.Create;
  doc.async := false;
  doc.preserveWhiteSpace := true;
  doc.load(XmlEdit.Text);
  nl := doc.SelectNodes('//*');
  for i := 0 to nl.length - 1 do begin
    e := nl.item[i] as IXMLDOMElement;
    e.setAttribute('testattr', 'testvalue');
  end;
  doc.save(XmlEdit.Text);
end;
Zu OpenXML kann vielleicht Bernhard Geyer etwas sagen.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 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