html mit xml-Befehlssatz bearbeiten

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

html mit xml-Befehlssatz bearbeiten

Beitrag von Sebastian »

Ich bearbeite gerade eine XHTML-Datei mit dem XML-Befehlssatz.
Schwierigkeiten bekommen ich allerdings bei Paragraphen mit span- und em-Elementen. z.B.
<p>Der Text beginnt <span>und</span läuft hier weiter</p>
Wie kann ich einen solchen <span>-Knoten selbst erzeugen und ihn "in der Mitter" des Knotentextes des p-Knotens platzieren?
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: html mit xml-Befehlssatz bearbeiten

Beitrag von Kiffi »

mit CDATA klammern oder die Klammern escapen.

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: html mit xml-Befehlssatz bearbeiten

Beitrag von Sebastian »

Wie kann ich die Klammern escapen?
Kannst du mir ein (ganz kurzes) Beispiel mit beiden Varianten zeigen?
Funktioniert #ReFormat mit solchen "inneren" Knoten korrekt?
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: html mit xml-Befehlssatz bearbeiten

Beitrag von Sebastian »

CData habe ich verstanden - vielen Dank für den Tipp. Zum escapen finde ich keinen Hinweis...
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: html mit xml-Befehlssatz bearbeiten

Beitrag von Kiffi »

Code: Alles auswählen

<myNode><![CDATA[<p>Der Text beginnt <span>und</span läuft hier weiter</p>]]></myNode>
oder

Code: Alles auswählen

<myNode><p>Der Text beginnt <span>und</span> läuft hier weiter</p></myNode>
Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: html mit xml-Befehlssatz bearbeiten

Beitrag von Sebastian »

Hm. Wenn ich es richtig verstehe, dann wird der Code aber schlussendlich in den Beispielen später vom Browser nicht umgesetzt, weil ja die Klammern escaped sind, richtig? Das will ich ja gerade nicht...
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: html mit xml-Befehlssatz bearbeiten

Beitrag von Kiffi »

poste mal ein kleines Beispiel anhand dessen wir Dein Problem nachvollziehen können.

Grüße ... Peter
a²+b²=mc²
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: html mit xml-Befehlssatz bearbeiten

Beitrag von Nino »

Sebastian hat geschrieben:Hm. Wenn ich es richtig verstehe, dann wird der Code aber schlussendlich in den Beispielen später vom Browser nicht umgesetzt, weil ja die Klammern escaped sind, richtig?
Wenn Du den erzeugten XHTML-Code einfach mit SaveXML() in eine Datei schreibst, wird das so sein, denke ich.
Aber Du kannst stattdessen z.B. mit ComposeXML() den XHTML-Code in einem String speichern, mit ReplaceString() die "escapeten" spitzen Klammern wiederherstellen, und dann alles mit WriteString() in einer XHTML-Datei speichern.
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: html mit xml-Befehlssatz bearbeiten

Beitrag von Sebastian »

Hm. Dann bräuchte ich die XML-Bibliothek ja eigentlich gar nicht mehr und kann alles per writestring erstellen.
CData ist leider auch nicht die Lösung, Ich wusste nicht, dass dann auch wirklich CData in die Datei geschrieben wird. Ich dachte, dass dann einfach der Text selbst ignoriert wird - das wäre eine Lösung gewesen.

Ein Beispiel habe ich doch gegeben? Ich will ein <p>-Element erstellen und einen Teilbereich kursiv machen (über span oder em). Das Ganze am liebsten über die XML-Befehle, falls es denn möglich ist...
(Win 11 64-bit, PB 6.04 und 6.10)
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Re: html mit xml-Befehlssatz bearbeiten

Beitrag von freak »

Dazu sind mehrere Schritte nötig. Du musst das <span> innerhalb des <p> erstellen, den ensprechenden Inhalt setzen und diesen Inhalt dann aus dem <p> Element löschen.

In diesem Beispiel sieht man an den Debug-Ausgaben ganz gut wie sich die Einzelschritte im XML auswirken:

Code: Alles auswählen

; XML Parsen und <p> Knoten finden
ParseXML(0, "<p>Der Text beginnt und läuft hier weiter</p>")
P = MainXMLNode(0)
Debug ComposeXML(0, #PB_XML_NoDeclaration)

; Position für <span>-Element (0-basiert)
SpanStart = 17
SpanEnd = 20

; 1) Neues <span>-Element in <p> erstellen
Span = CreateXMLNode(P, "span")
Debug ComposeXML(0, #PB_XML_NoDeclaration)

; 2) <span>-Element an die richtige Position in <p> rücken
SetXMLNodeOffset(Span, SpanStart)
Debug ComposeXML(0, #PB_XML_NoDeclaration)

; 3) Inhalt für <span> setzen
SpanText$ = Mid(GetXMLNodeText(P), SpanStart+1, SpanEnd-SpanStart)
SetXMLNodeText(Span, SpanText$)
Debug ComposeXML(0, #PB_XML_NoDeclaration)

; 4) Inhalt des <span> aus <p> entfernen
PText$ = GetXMLNodeText(P)
PText$ = Left(PText$, SpanStart) + Right(PText$, Len(PText$) - SpanEnd)
SetXMLNodeText(P, PText$)
Debug ComposeXML(0, #PB_XML_NoDeclaration)
Antworten