Avatar billede r.hegaard Nybegynder
06. august 2009 - 15:26 Der er 1 kommentar og
2 løsninger

Hvordan bruger jeg mine egne funktioner i XSLT?

Jeg har et XML-dokument, som jeg formaterer via XSL-Stylesheet. Jeg har set flere stedet på nettet, at man kan lave sine egne funktioner i C#, JavaScript, JScript m.m. og bruge i sine XSL-dokumenter og det vil jeg gerne gøre brug af, men jeg kan desværre ikke få det til at virke.
Nedenfor har jeg indsat et lille eksempel til at illustrere problemet.

Mit XML-document:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="xsl.xsl"?>
<test>
  <test>1/2/3</test>
</test>

Mit XSL-document:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:myScript="urn:local-function">
<xsl:output method="xml" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes" />
<xsl:template match="/test">
  <html>
  <head>
    <title>TEST</title>
    <style>
    <msxsl:script language="JScript" implements-prefix="myScript" xmlns:theScript="urn:local-function">
      function DoSomething(abc) {return abc;}
    </msxsl:script>
    </style>
  </head>
  <body>
    <xsl:value-of select="myScript:DoSomething(test)" />
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Når jeg åbner ovenstående XML-dokument, får jeg følgende fejl:
The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.
--------------------------------------------------------------------------------
Namespace 'urn:local-function' does not contain any functions.

Hvad gør jeg forkert?
Avatar billede jokkejensen Novice
11. august 2009 - 09:55 #1
javascript skal ikke køres på serveren, slet ikke nestet i et <style> tag.

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:myScript="urn:local-function">
<xsl:output method="xml" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes" />
<xsl:template match="/test">
  <html>
  <head>
    <title>TEST</title>
    <style>
    </style>
    <script type="text/javascript">
      function DoSomeThing(){}
    </script>
  </head>
  <body>
    <script type="text/javascript">
          DoSomeThing();
      </script>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>


msxml tilbyder dog at bruge server kode inde i dine xslt filer.

Se et simpelt eksmempel:

<msxsl:script language="C#" implements-prefix="Date">
   
    public string GetDate()
    { string s = DateTime.Now.ToString();

        return s;
    }
</msxsl:script>

Jeg får værdien fra serveren vha <xsl:value-of select="Date:GetDate()" /> Dog vil jeg anbefale dig at holde dit server script væk fra xslt transformations filerne, og kun bruge dem til at transformere med, og så have dine funktioner som xslt:extensions.

/J
Avatar billede r.hegaard Nybegynder
26. november 2010 - 09:09 #2
Det er vist tid at få lukket denne tråd :-)
Vil du lægge et svar?
Avatar billede jokkejensen Novice
26. november 2010 - 12:31 #3
jooo men hvis du ikke mener jeg har hjulpet, tager du bare selv points.
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