[XML] HTML-Tags in XML

Saschlong

Lt. Junior Grade
Registriert
Feb. 2004
Beiträge
266
Geht das?
Also ganz normale HTML-Tags in einem XML-Tag verwenden, ohne das der Parser/Interpreter-whatever durcheinander kommt?

Thanx
Lingster
 
wenn sie valide sind, ja.

edit:
bzw nein. in xml kannst du nur xhtmlkonforme tags verwenden.
 
Genau dafür wurde XHML entwickelt.
Du kannst in XML keine Tags ohne Endtag einfügen.
HTML:
<p>Absatz<br>mehr<br>zeilig</p>
Das wäre z.B. halbwegs valider HTML Code.
In XHTML würde das so aussehen:
HTML:
<p>Absatz<br />mehr<br />zeilig</p>
Du musst also XML konform abgeschlossene Tags ohne Inhalt oder korrektes Anfangs- und Endtag haben. Die Verschachtelung muss auch in der richtigen Reihenfolge wieder aufgelöst werden.
Wie gesagt. genau für diesen Zweck wurde XHTML entwickelt. Schau dir also die Spezifikationen davon an.

HTH, Erazor
 
Dadd weiß ich ja.
Mir gehts's drum ob's geht ein XML-Tag zu parsen das HTML-Tags enthält, der Parser dann das XML-Tag als Container erkennt und die HTML-Tags später richtig erkennt und darstellt.
Z.B. für'n einfaches Newsscript...
 
Na ja, willst du die in das XML-Container-Tag eingebetteten HTML-Elemente später "nur" ausgeben, ohne daß der XML-Parser sie als XML-Elemente erkennt, dann mußt du sie ganz gewöhnlich als CDATA behandeln lassen. Sprich, du mußt alle XML-kritischen Zeichen escapen (bestes denglisch).
Beispiel:
Code:
<container>
  &lt;h1&gt;Ich bin ein HTML-Tag&lt;/h1&gt;&lt;p&gt;Das ist ein Beispiel&lt;/p&gt;
</container>
Beabsichtigst du allerdings, daß der XML-Parser die eingebetteten Elemente als ganz normale XML-Elemente erkennt, aber sie von den anderen XML-Elementen differenzierbar sind, dann ist es am sinnvollsten, wenn du die HTML-Tags in einen eigenen Namensraum packst. Zum Bleistift so:
Code:
<xmlrootelement xmlns:xhtml="http://www.w3.org/1999/xhtml">
...
<irgendeinXMLTag>
   <!-- als container zB ein div-Element -->
  <xhtml:div>
    <xhtml:h1>Ich bin ein HTML-Tag</xhtml:h1><xhtml:p xhtml:style="sonstwas">Das ist ein Beispiel</xhtml:p>
  </xhtml:div>
</irgendeinXMLTag>
...
</xmlrootelement>
(Mehr über XML Namespaces gibt's zB hier in deutsch: http://www.schumacher-netz.de/TR/1999/REC-xml-names-19990114-de.html )

Gruß,
Matsche
 
Zuletzt bearbeitet: (Fehler beseitigt)
Ah, cool das meinte ich, mit 'denglisch' meinst Du die Umlaute, oder?
Ich hätte nicht gedacht, das das so relativ einfach geht...
Jetzt müsste ich nur 'nen schicken Parser finden, ihr wisst da nicht zufällig einen?
Auf jeden Fall Danke schon mal!
 
Ne, mit "denglisch" meinte ich eigentlich: Englische Begriffe vergewaltigen und eindeutschen, oder andersum :D
Die Zeichen, welche für XML eine besondere Bedeutung haben (und die du folglich 'escapen' :) mußt) sind jene hier:

& : &amp;
< : &lt;
> : &gt;
" : &quot;
' : &apos;

Du mußt natürlich diese Zeichen dann für die HTML-Ausgabe wieder rückkonvertieren!

Über die Umlaute brauchst du dir keine Gedanken machen, solange du im XML-Dokument im Prolog den Zeichensatz angibst.
Beispiel für latin-1:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>

Beim Parser kommt's drauf an, welche Programmiersprache du benutzt. Grundsätzlich läßt sich aber sagen, daß es für fast jede einen anständigen Parser gibt.
Für Java oder C++ kann ich dir zB den Xerces empfehlen.
Für andere Sprachen hilft dir sicher Google weiter.

Gruß,
Matsche
 
Als niederer Webcoder muß ich mir wohl was für PHP suchen.
Aber auf jeden Fall danke.
 
PHP hat doch 2 XML Parser eingebaut. SimpleXML und den anderen ;) hab mit beiden noch nichts gemacht, weiß aber dass se drin sind
 
Okidok, schick... Thanx
Lieber blöd gefragt, als blöd geblieben!
 
verpack deine Daten in ein
<xmlelement>
<![cdata[ dieser Text wird unformatiert übernommen]]>
</xmlelement>

dann kannst du alles in ein xml-element verpacken
 
Zuletzt bearbeitet:
Natürlich damit der User kein ]]> in seinen Beitrag einfügen kann, um damit die Datenstruktur zu zerstören...

Wobei das eigentlich in die Kategorie "versuchter HTML-Tag" fallen sollte und somit in ]]&gt; umgewandelt werden dürfte, BEVOR es in die XML-Datei geschrieben wird...
 
Oh, Tatsache. Das wäre ziemlich dumm, wenn Du sowas wie diesen komischen BB-Code verwenden wolltest.
 
</Life> schrieb:
Natürlich damit der User kein ]]> in seinen Beitrag einfügen kann, um damit die Datenstruktur zu zerstören...

Wobei das eigentlich in die Kategorie "versuchter HTML-Tag" fallen sollte und somit in ]]&gt; umgewandelt werden dürfte, BEVOR es in die XML-Datei geschrieben wird...
fast... mit <![CDATA[ (unbehandelter Text) ]]> kann man alles als normalen Text behandeln lassen.
Wenn ich jetzt also plain text reinschreibe, der auch plain bleiben soll würde ich gerne ]]> escapen können. Kann ja sein, dass irgendjemand einen Plaintext über XML schreibt und <![CDATA[ ]]> erwähnt. Dann wär ich am Arsch :)

Hab gerada bei w3c.org/xml geschaut. Die schreiben zwar was CDATA Sections sind und dass diese ']]>' nicht enthalten dürfen aber wie mans escapet, sagt wieder niemand...
Oder hab ich nur was übersehen?

edit: gerade Versuche gemacht. ]]&gt; geht auch nicht, weil ]]> als einziges Markup interpretiert wird, wie in der Doku steht. Ich krieg das echt nicht escapet, ist ja zum kotzen...
 
Zuletzt bearbeitet:
Das wäre abere ein zimlich übles Foul in der Spezifikation, wenn's nicht gehen würde...
 
Jo, wärs. Hab jetzt schon in einigen Quellen gelesen, dass man drauf achten soll, dass ]]> nicht im Text vorkommt. Dann muss man so Daten wohl vollständig enkodieren mit base64 oder so. Finds aber ziemlich seltsam.
 
Zurück
Oben