Avatar billede kedde65 Praktikant
13. april 2005 - 21:52 Der er 2 kommentarer og
3 løsninger

HTML Tags i XML filen kommer ikke med ved transform

Hej

Jeg har en xml fil, der indeholder noget tekst og nogle HTML tags. Men når jeg bygger et style sheet der skal omformatere det hele til HTML, så forsvinder de HTML tags der var i XML filen i forvejen. Hvordan kan jeg undgå dette?

VH CK
Avatar billede Slettet bruger
14. april 2005 - 01:53 #1
Du skal lave en/flere templates der tager sig af at kopiere dine HTML tags, f.eks.:

<xsl:template match="FONT | CENTER | MARQUEE | font | center | marquee">
  <p>Please stop using <strong>&lt;<xsl:value-of select="name()" />&gt;</strong> in my XML...</p>
</xsl:template>

/CS :-)
Avatar billede kedde65 Praktikant
14. april 2005 - 05:53 #2
Hmmm, det ser ikk ud til det virker helt efter planen... jeg kan heller ikke rigtigt se, hvordan dette skal gøre at mine HTML Tags i XML filen bliver vist. Kan du uddybe det?

VH CK
Avatar billede Slettet bruger
14. april 2005 - 12:57 #3
OK - nu ved jeg jo ikke hvordan dit stylesheet ser ud, men ovenstående skulle gerne vise dig at en template kan matche mere end eet element, og at du kan få navnet på det enkelte element vha. name() - men lad nu det ligge. Hvis du bare gerne vil kopiere HTML elementerne videre til outputtet kan du bruge flg. templates som start:

<xsl:template match="p | div | span">
  <xsl:copy>
      <xsl:apply-templates select="@* | *" />
  </xsl:copy>
</xsl:template>

<xsl:template match="@*">
  <xsl:value-of select="." />
</xsl:template>

- Igen kommer det lidt an på hvordan resten af dine templates er udformede.

/CS
Avatar billede kedde65 Praktikant
14. april 2005 - 15:50 #4
Hej

Nedenfor har jeg angivet mit stylesheet og min xml.(Jeg har endnu ikke prøvet det du har skrevet :-) )

XML:
-------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<courses>
    <course>
    <title>MS Excel Grundlæggende</title>
    <who>Alle uden kendskab til Excel</who>
    <goal>Formålet med dette kursus er at gøre deltagerne i stand til at bruge Excel til mange små opgaver i hverdagen.
    På kurset kommer vi igennem hvordan regneark og specielt Excel er bygget op, og hvad man kan bruge det til.</goal>
    <content>
        <ol>
            <li>Brugerfladen<ol>
                <li>Menuer og værktøjslinier</li>
                <li>Celler, rækker og kolonner</li>
                <li>Navigering med mus, tastatur og genveje</li>
            </ol>
            </li>
            <li>Brug af regnearket<ol>
                <li>Forskellige ark</li>
                <li>Rækker, celler og kolonner</li>
                <li>Referencer – absolutte og relative</li>
                <li>Formler</li>
                <li>Formatering</li>
                <li>Betinget formatering</li>
                <li>Statisk formatering</li>
                <li>Brugerdefineret dataformater</li>
                <li>Datavalidering</li>
                <li>Beskyttelse af ark</li>
            </ol>
            </li>
        <li>Udskrivning<ol>
            <li>Definering af udskriftsområder</li>
            <li>Top og bundtekst</li>
        </ol>
        </li>
        <li>Grafer<ol>
            <li>Opsætning</li>
            <li>Redigering</li>
            <li>Standard grafer vs. Brugerdefinerede grafer</li>
            <li>Udskrivning af grafer</li>
        </ol>
        </li>
        <li>Pivottabeller<ol>
            <li>Opsætning</li>
            <li>Redigering</li>
            <li>Søgning og brug</li>
        </ol>
        </li>
        <li>Deltagernes egne spørgsmål</li>
    </ol>
    </content>
    <pre>Kursisterne skal have godt kendskab til brugen af Windows. Kursisterne skal være fortrolige med filerhåndtering, stifinder samt brugen af musen. Det kræves ikke at man i forvejen har kendskab til MS Excel.</pre>
    <time>9:00 til 16:00</time>
    <days>2</days>
    <time>9:00 til 16:00</time>
    </course>
</courses>


StyleSheet:
-------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="ISO-8859-1" />
    <xsl:template match="/">
        <table border="0">
            <xsl:for-each select="courses/course">
                <tr>
                    <td height="20px"><p></p></td>
                </tr>
                <tr>
                    <td>
                    <table width="80%" cellspacing="0px" cellpadding="0px">
                        <tr><td valign="top" height="40px" style="font-size:x-large;" colspan="2" align="center"><xsl:value-of select="title"/></td></tr>
                        <tr><td width="150px" valign="top">Hvem bør deltage:</td><td><xsl:value-of select="who"/></td></tr>
                        <tr><td height="5px"></td></tr>
                        <tr><td width="150px" valign="top">Målsætning:</td><td><xsl:value-of select="goal"/></td></tr>
                        <tr><td height="5px"></td></tr>
                        <tr><td width="150px" valign="top">Indhold</td><td><xsl:value-of select="content"/></td></tr>
                        <tr><td height="5px"></td></tr>
                        <tr><td width="150px" valign="top">Forudsætninger:</td><td><xsl:value-of select="pre"/></td></tr>
                        <tr><td height="5px"></td></tr>
                        <tr><td width="150px" valign="top">Tider:</td><td><xsl:value-of select="time"/></td></tr>
                        <tr><td height="5px"></td></tr>
                        <tr><td width="150px" valign="top">Antal dage:</td>
                            <td>
                                <xsl:value-of select="days"/>
                                <xsl:if test="days>1">
                                    dage
                                </xsl:if>
                                <xsl:if test="days=1">
                                    dag
                                </xsl:if>
                            </td>
                        </tr>
                        <tr><td height="5px"></td></tr>
                        <tr><td width="150px" valign="top">Sidst opdateret:</td><td><xsl:value-of select="lastEdited"/></td></tr>
                    </table>
                    </td>
                </tr>
            </xsl:for-each>
        </table>
    </xsl:template>
</xsl:stylesheet>



VH CK
Avatar billede Slettet bruger
15. april 2005 - 11:58 #5
Aaaah - ja der er jo ingen grund til at gøre det sværere end det er :-)

Hvis du ikke skal manipulere med HTML'en fra <content> så find det sted hvor du udskriver den:

  <xsl:value-of select="content"/>

og brug en "copy-of" i stedet for:

  <xsl:copy-of select="content"/>

- og det var så det...

/CS

PS: Og forklaringen er selvfølgelig at "value-of" returnerer alle text() nodes under elementet, hvorimod "copy-of" slet og ret kopierer elementet inkl. "child-nodes" og attributter.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester