AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML: Im Absatz Text und Tags kombinieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML: Im Absatz Text und Tags kombinieren

Ein Thema von GHorn · begonnen am 31. Mai 2011 · letzter Beitrag vom 1. Jun 2011
Antwort Antwort
Seite 1 von 2  1 2      
GHorn

Registriert seit: 24. Mär 2009
Ort: NRW
124 Beiträge
 
#1

XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 11:18
Hallo,

ich komme bei folgendem Problem trotz ausgiebiger INet-Suche einfach nicht weiter:

In einem Textabsatz sollen Texte und Tags kombiniert werden. Hintergrund: ein Tool liest das XML-File und interpretiert die Tags wie in diesem Fremdprogramm konfiguriert.

Beispiel der XML-Datei:
Code:
  <?xml version="1.0" encoding="UTF-8" ?>
  <body>
    <p>
      Dies ist normaler Text
      <bold>und dies wird als Fettschrift interpretiert</bold>
      und hier gehts wieder normal weiter
    </p>
  </body>
Das Fremdprogramm liest den Absatz <p>..</p> interpretiert den Tag <bold> als "schreibe den nachfolgenden Text in Fettschrift bis </bold> kommt" und macht danach in normaler Schrift weiter. Dieses Verhalten wird im Fremdprogramm definiert.

Mein Ansatz dazu ist:
Delphi-Quellcode:
procedure TForm1.Btn_CreateClick(Sender: TObject);
var
  My_XML: IXMLDocument;
  n1, n2, n3: IXMLNode;
  sCellVal: string:
begin
  My_XML := NewXMLDocument('1.0');
  My_XML.Active := True;
  My_XML.ChildNodes.Clear;
  My_XML.Encoding := 'UTF-8';
  n1 := My_XML.AddChild('body');
  n2 := n1.AddChild('start');
  n3 := n2.AddChild('p'); // Neuer Absatz bzw. zusammengehöriger Text
  s := 'Dies ist normaler Text ';
  s := s + '<bold>und dies wird als Fettschrift interpretiert</bold> ';
  s := s + 'und hier gehts wieder normal weiter.';
  n3.Text := s;
  My_XML.SaveToFile('Test.xml');
end;
... und das funktioniert nicht. Die Tags <bold> und </bold> werden als Text und nicht als Tag sowohl vom IE als auch vom Fremdprogramm interpretiert und alles erscheint (schlecht lesbar) in einer langen Zeile in diesem Absatz.


Fragen:
1) Wie setze ich die Zeilenumbrüche (bessere Lesbarkeit)? Ein "#13#10"
reicht offensichtlich nicht. Jedenfalls werden sie im IE nicht ausgeführt.
2) Was muss ich machen, dass die Tags (im obigen Beispiel <bold> </bold> auch
als solche erkannt werden. Der IE ignoriert sie einfach und das lesende
Tool kann damit auch nix anfangen. Sie werden schlicht als Text interpretiert.

Besten Dank vorab für eure Hilfe!
Gerald
  Mit Zitat antworten Zitat
Benutzerbild von Coffeecoder
Coffeecoder

Registriert seit: 27. Apr 2011
242 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 13:12
Hi,

1) Wie setze ich die Zeilenumbrüche (bessere Lesbarkeit)? Ein "#13#10"
reicht offensichtlich nicht. Jedenfalls werden sie im IE nicht ausgeführt.
Hast du schon mit einem "<br>-Tag" versucht anstelle #13#10?
Coffeecoder
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 13:38
Zitat:
'text<bold>text'
tja, das geht so nicht.

Du mußt diesen String schon zerlegen und mußt dann alle einzelnen Elemente einzeln übergeben.

Tipp/Versuch:
Delphi-Quellcode:
Temp.XML := '<root>' + S + '</root>'; // oder Temp.LoadXML('<root>' + S + '</root>');
n3.ChildNodes.AddNodes(Temp.RootNode.ChildNodes);
Bei den Methoden mußt'e aber mal schauen, wie die wirklich heißen. (ist jetzt mehr ein Pseudobeispiel)



PS: Das was du schreiben möchtest, ist kein reinrassiges XML. (einen Text ohne umschließenden Node gibt es nicht)
Darum wird in XHTML der Text oftmals in <p>'s oder <span>'s eingeschlossen, damit er irgendwo drin ist.

Also kann es gut sein, daß deine verwendete XML-Lib einer derartige Verschachtelung nicht zuläßt.

PPS: Für die Browser ist ein Zeilenumbruch im "Quelltext" kein Zeilenumbruch in der Anzeige.
In der Anzeige werden jeweils mehrere Leerzeichen, Zeilenumbrüche und Tabs als 1 Leerzeichen angezeigt. (außer in bestimmten CODE-Tags, wo dieses anders definiert ist).
Standardmäßig ist ein Zeilenumbruch für die Anzeige das <BR>-Tag (ein Umbruch "BReak" in der Zeile), welcher in XML eigentlich ein <BR/> ist, da es keine offenen Tags Nodes gibt.



Also entweder du hälst dich an die Regeln des XML/XHTML oder du mußt eine HTML-Lib verwenden.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (31. Mai 2011 um 14:02 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 13:41
Die „Tags“ werden als Text interpretiert, weil sie Text sind (die spitzen Klammern werden mit &gt; und &lt; kodiert, was du sehen müsstest, wenn du die XML-Datei mit Notepad o.ä. öffnest). Wenn du einen <bold>-Tag hinzufügen willst, musst du das genau so machen wie bei <body>, <start> usw.

Wenn du das so machst, stößt du natürlich auf das Problem, dass du nicht vor und nach dem Tag, sozusagen in der selben „Ebene“, Text haben kannst. Das liegt ganz einfach daran, dass dies in XML nicht vorgesehen ist. In XML hat ein Knoten immer entweder Text als Inhalt oder weitere Kind-Knoten. Mit einem XML-Parser kommst du hier also nicht weiter. Oder du müsstest schauen, dass du den Text irgendwie anders verpackst, z.B. so:
Code:
<p>
  <span>Ich bin eine</span>
  <bold>Banane</bold>
  <span>und gelb</span>
</p>
Wenn das nicht geht, brauchst du einen SGML- bzw. HTML-Parser. Windows bringt bereits einen mit: IHTMLDocument2.
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#5

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 13:51
Wie soll er das auch "richtig" ausgeben?
Du schreibst eine normale XML-Datei, willst aber (X?)HTML anzeigen?

Ausserdem ist <bold> kein Standardkonformer Tag zur Fettschrift für Browser, sondern <b>.

Für sowas bräuchtest du ein eigenes XSD (XML Schema), beziehungsweise eher ein zugehöriges XLS-Stylesheet und einen XSLT-fähigen Browser, das ist aber ein ganz anderes Thema.

Ausserdem verschachtelst du Tags innerhalb von Text, somit müsste der ganze body-Abschnitt eigentlich als CDATA deklariert sein, um XML-konform zu bleiben.


Wieso gibst du das ganze nicht einfach mit einem entsprechenden, validen Doctype als HTML aus?

Geändert von blackfin (31. Mai 2011 um 14:36 Uhr)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 14:08
Du solltest ein Element und nicht einfach nur ein Child bzw. Node anhängen.
Das ist ein Unterschied.
Das DOM betrachtet alles zunächst mal als Knoten (Node).
Es gibt aber unterschiedliche Nodetypen; das ist insbesondere beim Schreiben wichtig, den richtigen Nodetyp zu verwenden.
Andreas
  Mit Zitat antworten Zitat
GHorn

Registriert seit: 24. Mär 2009
Ort: NRW
124 Beiträge
 
#7

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 14:40
Danke für vielen Antworten!

@blackfin: Das ist das, was ich versucht habe zu erklären. Das
fremde Auswertetool erkennt diesen Tag und reagiert entsprechend. Der Text soll nicht "direkt" fett angezeigt werden.

Zum besseren Verständnis und zum "Beweis, dass es doch irgenwie zu gehen scheint " habe ich ein Beispiel angehängt, das ich mit dem IE geöffnet habe. Ich kapiere nicht, wie das funktioniert. In dem Beispiel
steht nicht <bold> sondern <strong>. In dem Fremdtool kann ich nun hinter diesem Schlüsseltag irgendeine Aktion hinterlegen. Z.B. Fettdruck, kursiv oder hochgestellt usw.

Die übrigen Antworten werde ich jetzt abarbeiten. U.U. bringen die mich ja noch auf das richtige Gleis...
Danke.
Miniaturansicht angehängter Grafiken
screenshot.jpg  
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 14:48
Browser sind Fehlern gegenüber relativ tolerant und stellen einiges dar, was eigentlich nach dem Standard nicht gültig wäre – wer will schon einen Browser, der beim kleinsten Markup-Fehler bereits aufgibt und gar nichts mehr anzeigt? In den meisten anderen Programme führen solche Fehler aber zum Abbruch des Parsingvorgangs.
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#9

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 14:53
Hm...also, wenn das Ding so aussieht, dann bleibt dir glaube ich nur eine Möglichkeit: Parse / zerlege den body-Text selbst über reguläre Ausdrücke anhand der Tags und setz es dann wieder dementsprechend zusammen.
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#10

AW: XML: Im Absatz Text und Tags kombinieren

  Alt 31. Mai 2011, 14:55
Code:
In den meisten anderen Programme führen solche Fehler aber zum Abbruch des Parsingvorgangs
Wenn man den Text, der auch Tags enthält in ein <![CDATA[.....]]> packt, dürfte sich das auch ohne Parser-Fehler vom XML-Parser parsen lassen. (Was für ein Satz..)
Nur muss man dann den CDATA-Inhalt selbst (über regular expressions o.Ä) auswerten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:12 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