Laden...

XHTML, Remove Tags, Transform

Erstellt von syn87 vor 14 Jahren Letzter Beitrag vor 14 Jahren 864 Views
S
syn87 Themenstarter:in
87 Beiträge seit 2008
vor 14 Jahren
XHTML, Remove Tags, Transform

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 😉

3.971 Beiträge seit 2006
vor 14 Jahren

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...

3.003 Beiträge seit 2006
vor 14 Jahren

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)

3.003 Beiträge seit 2006
vor 14 Jahren

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)

S
syn87 Themenstarter:in
87 Beiträge seit 2008
vor 14 Jahren

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