Hallo an alle,
vorne weg, ich kenn mich mit XSLT und dergleichen nicht aus, dh. wenn jemand ein fertiges Snippet für mich hat, wäre das wirklich toll, da ich nicht die Zeit hab, mich in das Thema noch einzuarbeiten.
Nun das Problem: Ich habe einen HTML to XHTML Parser. Dh. mein Outputfile liegt im validen XML-Format vor. Weiterhin möchte ich nun sämtliche <br />, <a>, <u> und andere Formatierungstags entfernen.
Aus
<div>
<b>Hallo</b><br />
<a href="next.html">Link</a>
</div>
soll also
<div>
Hallo
Link
</div>
werden.
Bin dankbar fuer jede Hilfe 😉
Du kannst mithilfe eines XmlDocuments rekursiv/iterativ durch die Nodes gehen. Nodes entfernst du über CurrentNode.Parent.RemoveChild(CurrentNode). Bei beispielsweise a-Nodes entfernst du wiederum den Node und fügst an die selbe Stelle (ChildNodes) ein neuen TextNode ein. Den Inhalt von a bekommst du über CurrentNode.InnerText.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Würde ich abraten. Deine Idee mit dem xslt-Transform ist schon sehr gut. Grundgerüst für eine Ersetzung wäre etwas in der Form:
<xsl:template match="b">
<xsl:apply-templates/>
</xsl:template>
@kleines_eichhörnchen: InnerText würde vermutlich bei rekursivem Vorgehen zum einen oder anderen Problem führen. Wenn man schon über die logische Struktur des Dokuments vorgeht, sollte man von InnerText besser die Finger lassen.
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Nachtrag: grad ausprobiert, funktioniert soweit:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="b">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="u">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="i">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="br"></xsl:template>
<xsl:template match="a">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
Angewendet auf folgendes XML, macht das genau, was du wolltest:
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xml" href="XSLTFile1.xslt" ?>
<root>
<b>
bold text
<i>Bold and italic</i>
<a href="href.link">my
<u>
link
</u>
</a>
</b>
</root>
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Hi,
vielen dank an euch beide. Das mit dem XSLT zeugs sieht ja ganz gut aus. Nachdem ich mich gestern noch etwas damit beschaeftigt habe, denke ich auch, dass das eine geeignete Methode wäre.
LG