Avatar billede dgivoni Nybegynder
22. august 2001 - 11:52 Der er 7 kommentarer og
2 løsninger

tags med tekst indeholdende andre tags

Mit spørgsmål drejer sig om, hvordan jeg får flg. xml parset:
<text>
bla bla bla bla bla bla <link url=\"nyside.xml\">nyside</link> bla bla bla
</text>

Jeg vil gerne have nyside til at fremstå som et anchor i html, og på den rette plads, men indtil nu har jeg kun formået at få linket til enten at stå før eller efter teksten.
Hvad gør jeg?
Avatar billede nico26 Nybegynder
22. august 2001 - 13:26 #1
<xsl:template match=\"link\">
  <a><xsl:attribute name=\"href\">http://<xsl:value-of select=\"@url\"/></xsl:attribute></a><xsl:value-of/>
</xsl:template>
Avatar billede nico26 Nybegynder
22. august 2001 - 13:43 #2
her er et eksempel
XML:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<?xml-stylesheet href=\"test.xsl\" type=\"text/xsl\"?>

<text>
  <link url=\"www.eksperten.dk\">Eksperten</link>
  <link url=\"www.brodersalsa.dk\">Brodersalsa</link>
</text>


XSL:

<?xml version=\"1.0\"?>
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">
  <xsl:template match=\"/\">
    <html>
      <head>
        <title>Test</title>
      </head>

      <body>
        <table align=\"center\" border=\"2\">
          <xsl:for-each select=\"text/link\">
            <tr>
              <td><xsl:apply-templates select=\".\"/></td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
  <xsl:template match=\"link\">
    <a><xsl:attribute name=\"href\">http://<xsl:value-of select=\"@url\"/></xsl:attribute></a><xsl:value-of/>
  </xsl:template>
</xsl:stylesheet>
Avatar billede dgivoni Nybegynder
22. august 2001 - 14:03 #3
det var ikke helt det jeg mente. Den tekst som står på hver sin side af linket, vil jeg gerne have sådan i det endelige html-output også, dvs. med linket inde midt i teksten.
Avatar billede nico26 Nybegynder
22. august 2001 - 14:33 #4
nu er jeg med - kan du ikke bare lave to tags omkring linket

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<?xml-stylesheet href=\"test.xsl\" type=\"text/xsl\"?>
<root>
  <text>
    <pre>bla bla bla</pre><link url=\"www.eksperten.dk\">Eksperten</link><post>bla bla bla</post>
  </text>
  <text>
    <pre>bla bla bla</pre><link url=\"www.brodersalsa.dk\">Brodersalsa</link><post>bla bla bla</post>
  </text>
</root>


<?xml version=\"1.0\"?>
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\">
  <xsl:template match=\"/\">
    <html>
      <head>
        <title>Test</title>
      </head>

      <body>
        <table align=\"center\" border=\"2\">
          <xsl:for-each select=\"root/text\">
            <tr>
              <td><xsl:apply-templates select=\"pre\"/>
                  <xsl:apply-templates select=\"link\"/>
                  <xsl:apply-templates select=\"post\"/>
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
  <xsl:template match=\"pre\">
    <xsl:value-of/>
  </xsl:template>
  <xsl:template match=\"link\">
    <a><xsl:attribute name=\"href\">http://<xsl:value-of select=\"@url\"/></xsl:attribute><xsl:value-of/></a>
  </xsl:template>
  <xsl:template match=\"post\">
    <xsl:value-of/>
  </xsl:template>
</xsl:stylesheet>
Avatar billede dgivoni Nybegynder
22. august 2001 - 14:44 #5
jooo, men det er jo lidt besværligt i længden. Jeg syntes bare der burde være en smartere måde at gøre det på.
Avatar billede nico26 Nybegynder
22. august 2001 - 14:47 #6
jeg kan godt få linket til at stå i midten, problemet er bare at hele teksten bliver et link
Avatar billede janegil Nybegynder
24. august 2001 - 12:33 #7
http://www.w3.org/TR/xslt#patterns

Du skal nok matche på en patterne med \"text()\"

Selv om value-of() text-elemtet ditt er een lang bla-bla, bestaår den av to text-noder med et link-element i mellom. (Link-elementet inneholder så en 3. text-node.)

Avatar billede dgivoni Nybegynder
24. august 2001 - 13:04 #8
jeg tror ikke helt, jeg forstår hvordan jeg rent praktisk skal gøre det.
Hidtil har min pattern-matching kun resulteret i at den først matcher det ene pattern og derefter det andet.
Kan du uddybe dit svar lidt?
Avatar billede dgivoni Nybegynder
24. august 2001 - 13:48 #9
nu virker det sgu, flg. viser idéen i hvad jeg endte med:

<xsl:template match=\"/\">
    <xsl:apply-templates />
</xsl:template>

<xsl:template match=\"Link\">
    <a href=\"\">
        <xsl:value-of select=\".\"/>
    </a>
</xsl:template>

<xsl:template match=\"text()\">
    <xsl:value-of select=\".\"/>
</xsl:template>
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