Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Daten aus XML werden über XPath ausgelesen. Im Nachhinein nun aber mit Zeilenumbrüche (https://www.delphipraxis.net/205312-daten-aus-xml-werden-ueber-xpath-ausgelesen-im-nachhinein-nun-aber-mit-zeilenumbrueche.html)

juergen 25. Aug 2020 22:47


Daten aus XML werden über XPath ausgelesen. Im Nachhinein nun aber mit Zeilenumbrüche
 
Hallo zusammen,

in einem Projekt soll nun im Nachhinein(!) der Text mit Zeilenumbrüchen aus einer XML Datei ausgelesen werden, obwohl ich das vorher extra abgeklärt hatte.
So wie ich das sehe, müsste nach jedem
Code:
</span>
ein Zeilenumbruch erfolgen.
Das Programm liest über XPath die Daten in eine Nodelist ein und nimmt als Knoten in meinem Beispiel "DetailAddText".

Delphi-Quellcode:
           
IF ( x_NodeList_Item_DetailTxt.Nodes[i] <> NIL ) THEN
  BEGIN
    IF ( x_NodeList_Item_DetailTxt.Nodes[i].Text <> '' ) THEN
      BEGIN
        ls_Item_DetailTxt := x_NodeList_Item_DetailTxt.Nodes[i].Text;
      END;
  END;
Die XML hat z.B. folgenden Aufbau:

Code:
<DetailAddText>
   <p style="margin-top:0pt;margin-bottom:0pt;width:284pt;">
      <span style="font-size:10pt;font-family:Arial;">Das ist Text 1.</span>
   </p>
   <p style="margin-top:0pt;margin-bottom:0pt;width:284pt;">
      <span style="font-size:10pt;font-family:Arial;"/>
   </p>
   <p style="margin-top:0pt;margin-bottom:0pt;width:284pt;">
      <span style="font-size:10pt;font-family:Arial;">Das ist Text 2.</span>
   </p>
   <p style="margin-top:0pt;margin-bottom:0pt;width:284pt;">
      <span style="font-size:10pt;font-family:Arial;"/>
   </p>
   <p style="margin-top:0pt;margin-bottom:0pt;width:284pt;">
      <span style="font-size:10pt;font-family:Arial;">Das ist Text 3.</span>
   </p>
</DetailAddText>
Als Ergebnis kommt bei mir im Moment über XPath folgendes raus:

Code:
Das ist Text 1.Das ist Text 2.Das ist Text 3.
Gibt es eine (einfache) :roll: Möglichkeit das Auslesen über XPath im Nachhinein so anzupassen, dass nach jedem
Code:
</span>
ein Zeilenumbruch stattfindet?
Also das Ergebnis so ausschaut:
Code:
Das ist Text 1.
Das ist Text 2.
Das ist Text 3.
Falls es relevant ist: Ich nutze OXML.


Vielen Dank schon mal vorab für Hinweise!

Gyrospeter 26. Aug 2020 08:52

AW: Daten aus XML werden über XPath ausgelesen. Im Nachhinein nun aber mit Zeilenumbr
 
Ich kenne mich mit OXML nicht aus, allerdings weiß ich, dass es zb. im IXMLDocument oder TXMLDocument sowas wie [donodeautoindent] gibt. Vielleicht gibt es ja sowas auch bei dir?

himitsu 26. Aug 2020 11:20

AW: Daten aus XML werden über XPath ausgelesen. Im Nachhinein nun aber mit Zeilenumbr
 
NodeAutoIndent hat nur was mit der Formatierung der XML zu tun, aber es verändert nicht den Inhalt,
da XML so wie HTML mehrfache Leerzeichen/Tabulatoren/Zeilenumbrüche ignoriert und als 1 Leerzeichen interpretiert,
also für die Formatierung hier vollkommen irrelevant.




Nach Span kommt kein Zeilenumbruch ... das ist eine Inline-Formatierung,
aber nach dem </P> müsste ein Zeilenumbruch neuer Absatz rein.

Ich weiß nicht ob man bei OmniXML was mit XSLT (XML Transform) machen kann.

Im Prinzip ist das eine Art Programmiersprache, der du dein neues Format "Absätze mit Zeilenumbruch" gibst und sagst "duppliziere und fülle das mit jenen Daten aus der XML".

Delphi.Narium 26. Aug 2020 12:54

AW: Daten aus XML werden über XPath ausgelesen. Im Nachhinein nun aber mit Zeilenumbr
 
Bei allem in <p> ... </p> handelt es sich um einen Absatz.
Bei <span> ... </span> jedoch nicht.

Du muss also bei span keine Änderung vornehmen, sondern darfst die durch <p> vorgegebene Formatierung, hier einen Zeilenumbruch / Absatz, nicht ignorieren.

<span>
<p>

juergen 26. Aug 2020 20:25

AW: Daten aus XML werden über XPath ausgelesen. Im Nachhinein nun aber mit Zeilenumbr
 
Danke schon mal für die Infos.:-D
Dadurch dass ich über Xpath auf den Knoten "DetailAddText" gehe, bekomme ich ja nur den Text ohne die "Steuerzeichen".
Da suche ich eine Möglichkeit ohne Xpath mit seinem Knoten ändern zu müssen.

himitsu 26. Aug 2020 20:34

AW: Daten aus XML werden über XPath ausgelesen. Im Nachhinein nun aber mit Zeilenumbr
 
Statt .Text mal .GetXML oder .NodeText versuchen.

Also nicht nur die enthaltenen "Texte", sondern das ganze XML. (wobei das hier drin eigentlich xml-konformes HTML ist)
Mit einer HTML-Komponente könntest du es dann direkt anzeigen, bzw. es gibt Funktionen zum Extrahieren von Text aus HTML, welches auch die Zeilenumbrüche beachtet.

Für XML ist <p> ja keine Textformatierung.

Oder du mußt eben dennoch nur den "Text" auslesen und die gewünschten Zeilenumbrüche einfügen oder einfügen lassen (XSLT).

juergen 26. Aug 2020 23:25

AW: Daten aus XML werden über XPath ausgelesen. Im Nachhinein nun aber mit Zeilenumbr
 
Danke himitsu! :thumb:
Ich habe mir das jetzt angeschaut. Wenn ich
Delphi-Quellcode:
x_NodeList_Item_DetailTxt.Nodes[i].XML
nehme -wie von dir vorgeschlagen- dann habe ich den ganzen Kram inkl. der Steuerzeichen. Damit komme ich auf jeden Fall weiter.
:dp:


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:42 Uhr.

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