Toon posts:

[xslt] xsl:copy-of met namespaces

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben sinds een paar dagen wat aan het klooien met XSLT en probeer nu de volgende xml file:

XML:
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<structure>
  <title>Overview</title>
  <body xmlns="http://www.w3.org/1999/xhtml" xmlns:com="http://uplinx.eu/framework/components">
    <p>Welcome!</p>
    <com:test />
  </body>
</structure>


te transformeren met de volgende XSL:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="xml" indent="yes" doctype-public="-//W3C//DTD XHTML 1.1//EN"
    doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />

<xsl:template match="/structure">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title><xsl:value-of select="title" /></title>
        </head>
        <xsl:copy-of select="body" />
    </html>
</xsl:template>

</xsl:stylesheet>


Het probleem is dat de body node niet goed gekopieerd wordt. De output is:

XHTML:
1
2
3
4
5
6
7
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Overview</title>
   </head>
</html>
(zonder de betreffende body node dus).

Als ik nu echter in de source file de xmlns attribute van de body tag weghaal wordt de body tag wel gekopieerd:
XHTML:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Overview</title>
  </head>
  <body xmlns:com="http://uplinx.eu/framework/components" xmlns="">
    <p>Welcome!</p>
    <div><hr/>Component: test<hr/></div>
  </body>
</html>
(NB: de com:test wordt verderop ook vervangen)

Echter heb ik aan deze output helemaal niks, aangezien hij met de xmlns="" attribuut de body natuurlijk niet goed rendert.

Heeft iemand suggesties :)?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 01-12 20:19

Gerco

Professional Newbie

Je select="body" selecteert body alleen als die in de default namespace zit. body zit niet in de default namespace en dus ga je die op deze manier niet selecteren. Je moet in je stylesheet een prefix declareren voor de namespace waar body in zit (xhtml: ofzo) en dan select="xhtml:body" gebruiken.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Jeej, de volgende copy-of doet het inderdaad prima:
<xsl:copy-of select="xhtml:body" xmlns:xhtml="http://www.w3.org/1999/xhtml"/>

Ty :*!!