AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Zeilenumbrüche gehen bei Zuweisung an XML-Bindung verloren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeilenumbrüche gehen bei Zuweisung an XML-Bindung verloren

Ein Thema von rakekniven · begonnen am 12. Jun 2014 · letzter Beitrag vom 12. Jun 2014
Antwort Antwort
rakekniven

Registriert seit: 4. Apr 2008
Ort: Franken
82 Beiträge
 
Delphi XE5 Professional
 
#1

Zeilenumbrüche gehen bei Zuweisung an XML-Bindung verloren

  Alt 12. Jun 2014, 12:32
Hallo,

ich bekomme XML von einer DLL geliefert.
Das XML dumpe ich mir weg.
Im XML gibt es den Inhalt: (Man beachte den Zeilenumbruch bei AdditionalTextUser)
Code:
                <ProfileData>
                    <AdditionalTextUser>Positionierhinweis
1120 P1200Positionierhinweis
1120 P1200Positionierhinweis
1120 P1200</AdditionalTextUser>
               <\ProfileData>
Nun weise ich das XML einem Interface zu:
Code:
xyz_Received_XML: TXMLDocument;
xyz_XML        : IXMLxyzInterface;

xyz_XML := GetxyzInterface(xyz_Received_XML);
Aufruf aus Interface
Code:
function GetxyzInterface(Doc: IXMLDocument): IXMLxyzInterface;

Wenn ich nun auf das Element "AdditionalTextUser" zugreife, es ist vom Typ String, dann erhalte ich den Inhalt jedoch ohne CRLF.

Das Interface habe ich von einem XSD-Schema erstellt und bis auf den Zeilenumbruch funktioniert es wunderbar.

Wie kann ich die Zeilenumbrüche bewahren?
Frag google
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zeilenumbrüche gehen bei Zuweisung an XML-Bindung verloren

  Alt 12. Jun 2014, 12:52
Das ist auch vollkommen korrekt so.
Genau wie in HTML gibt es im XML keine Zeilenumbrüche ein oder mehre Zeileinumbrüche/Leerzeichen ergeben immer nur eine Leerzeichen, nach dem Auslesen.

Außer man man legt die Texte in entsprechende Tags ab, welche so definiert wurden, daß sie Zeilenumbrüche enthalten sollen,
wie es z.B. beim CDATA der Fall ist.

Oder man erstellt sich ein eigenes XML Schemata (DTD), wo man AdditionalTextUser als ein Solches deklariert.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Jun 2014 um 12:55 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Zeilenumbrüche gehen bei Zuweisung an XML-Bindung verloren

  Alt 12. Jun 2014, 13:03
Es geht aber um den Inhalt eines Knotens, nicht die Dokumentstruktur an sich. Die ganze CDATA-Geschichte habe ich vergessen, aber ich glaube, der Zeilenumbruch sollte erhalten bleiben, da hat er schon Recht.

Und bei mir wird er das auch.

Hier ein Beispiel:

Delphi-Quellcode:
program Project4;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  XmlIntf,
  XmlDoc,ActiveX;


const

   xmlContent: String =
      '         <ProfileData>' + #13#10 +
      '                <AdditionalTextUser>Positionierhinweis' + #13#10 +
       '1120 P1200Positionierhinweis' + #13#10 +
       '1120 P1200Positionierhinweis' + #13#10 +
       '1120 P1200</AdditionalTextUser>' + #13#10 +
       '            </ProfileData>';

var
   xmlClassRef: TXMLDocument;
   xmlIntfRef: IXMLDocument;
   node: IXMLNode;

begin
   CoInitializeEx(nil, COINIT_APARTMENTTHREADED);


   xmlClassRef := TXmlDocument.Create(nil);
   xmlClassRef.LoadFromXML(xmlContent);

   xmlIntfRef := xmlClassRef;

   WriteLn(xmlIntfRef.XML.Text);

   node := xmlIntfRef.DocumentElement.ChildNodes.First();

   writeLn(sLineBreak);
   WriteLn(node.Text);

   writeLn(sLineBreak);
   writeln(node.NodeValue);


   readln;
end.
Produziert:
Code:
<ProfileData>
   <AdditionalTextUser>Positionierhinweis
1120 P1200Positionierhinweis
1120 P1200Positionierhinweis
1120 P1200</AdditionalTextUser>
</ProfileData>



Positionierhinweis
1120 P1200Positionierhinweis
1120 P1200Positionierhinweis
1120 P1200


Positionierhinweis
1120 P1200Positionierhinweis
1120 P1200Positionierhinweis
1120 P1200
Ich weiß nicht, warum du überhaupt zunächst ein TXMLDocument hast. Und was das komische Interface macht. Wie ist es definiert?

Geändert von Der schöne Günther (12. Jun 2014 um 13:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zeilenumbrüche gehen bei Zuweisung an XML-Bindung verloren

  Alt 12. Jun 2014, 14:03
aber ich glaube, der Zeilenumbruch sollte erhalten bleiben, da hat er schon Recht.
Eben nicht.
Standardmäßig sind alle normalen Knoten als TEXT definiert und TEXT hat nunmal keine Zeilenumbrüche im "Text". CDATA schon.
Denn diese Zeilenumbrüche werden da nur zum "Formatieren" der XML-Datei verwendet und nicht für den Inhalt, drum ist das Alles auch das Selbe.

XML-Code:
<abc>
  Text {stell dir hier viele Leerzeichen/Tabs vor, welche die liebe DP "wegoptimiert"} Text
</abc>

<abc>Text Text</abc>

<abc>Text
Text</abc>
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Jun 2014 um 14:10 Uhr)
  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 11:56 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