Avatar billede tj_cuper Nybegynder
01. juni 2008 - 17:21 Der er 12 kommentarer og
1 løsning

Muligt at anvende to stylesheets i en xslt?

Hej,

Er der nogen af jer eksperter, der ved om det er muligt, at anvende flere stylesheets i en xslt fil.

Da jeg har udviklet en C# class der skal anvendes inde i selve xslt filen.

På forhånd tak :)
Avatar billede arne_v Ekspert
02. juni 2008 - 04:20 #1
Hvad mener du med anvende flere stylesheets ?

Lade et stylesheet inkludere et andet ?

Processe de to stylesheets serielt ?
Avatar billede janegil Nybegynder
03. juni 2008 - 11:29 #2
eller velge melloom to alternative stilark?
Avatar billede tj_cuper Nybegynder
03. juni 2008 - 13:21 #3
Det jeg mener er faktisk bare hvordan jeg tilføjer mit eget C# library.
Så jeg kan anvende dens funktioner i min XSLT rendering.
Avatar billede arne_v Ekspert
03. juni 2008 - 15:05 #4
Hvis du bryger .NET til at lave XSLT transformeringen med, saa er det nemt
at kalde noget C# kode i din XSL.

Jeg lavede engang dette eksempel:

using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

namespace E
{
    public class Calcer
    {
        public int Fac(int n)
        {
            if(n > 1)
            {
                return n * Fac(n - 1) ;
            }
            else
            {
                return 1;
            }
        }
        public int Sum(XPathNavigator xpn)
        {
            int sum = 0;
            foreach(XPathNavigator num in xpn.SelectChildren(XPathNodeType.Element))
            {
                sum += Fac(num.Select("child::*").Current.ValueAsInt);
            }
            return sum;
        }
    }
    public class MainClass
    {
        public static void Main(string[] args)
        {
            string input =
@"<allnum>
  <num>1</num>
  <num>2</num>
  <num>3</num>
  <num>4</num>
  <num>5</num>
</allnum>";
            string transform =
@"<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
                xmlns:ms='urn:schemas-microsoft-com:xslt'
                xmlns:csinline='urn:arne:csinline'
                xmlns:cs='urn:arne:cs'
                version='1.0'>
<ms:script language='C#' implements-prefix='csinline'>
<![CDATA[
    public string Header()
    {
        return ""Faculty:"";
    }
  ]]>
</ms:script>
<xsl:template match='/'>
<xsl:value-of select='csinline:Header()'/>
<xsl:for-each select='//num'>
fac(<xsl:value-of select='.'/>)=<xsl:value-of select='cs:Fac(number(.))'/>
</xsl:for-each>
Sum=<xsl:value-of select='cs:Sum(//allnum)'/>
</xsl:template>
</xsl:stylesheet>";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(input);
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(new XmlTextReader(new StringReader(transform)), new XsltSettings(true, true), null);
            StringWriter sw = new StringWriter();
            XmlTextWriter wrt = new XmlTextWriter(sw);
            wrt.Formatting = Formatting.Indented;
            XsltArgumentList xal = new XsltArgumentList();
            xal.AddExtensionObject("urn:arne:cs", new Calcer());
            xslt.Transform(doc, xal, wrt);
            Console.WriteLine(sw.ToString());
        }
    }
}
Avatar billede tj_cuper Nybegynder
03. juni 2008 - 15:39 #5
Gør jeg ikke, opretter selve xslt i umbraco, men vil gerne anvende nogle funktioner jeg har lavet i C# code library. Så ville høre om i viste hvordan man tilføjede dem i ens XSLT fil.

Ellers mange tak for det store eksempel :)
Avatar billede arne_v Ekspert
03. juni 2008 - 15:54 #6
Som sagt er det lavet til et andet spoergsmaal, saa jeg havde det paa lageret.

Maaske kan du godt bruge det.

Det forudsaetter at det er .NET som laver XSLT transformeringen. Men det forudsaetter
ikke at det er din kode. Umbraco er lavet i .NET.

Saa hvis Umbraco laver transformeringen server side, saa boer det virke.

Hvis Umbraco bare sender XML og XSL ud til browseren og den laver transformeringe,
saa er det en anden sag.
Avatar billede tj_cuper Nybegynder
07. juni 2008 - 23:33 #7
Det jeg ganske enkelt mener er hvordan man gør brug at sit script. Umbrac gør brug af sit etget på denne måde:

<!DOCTYPE xsl:Stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxml="urn:schemas-microsoft-com:xslt"
    xmlns:umbraco.library="urn:umbraco.library"
    exclude-result-prefixes="msxml umbraco.library">

Så ville høre om det er muligt at tilføje endnu et stylesheet inde i det allerede eksisterende stylesheet.
Avatar billede arne_v Ekspert
07. juni 2008 - 23:49 #8
Umbraco:

xmlns:umbraco.library="urn:umbraco.library"

mit eksempel:

xmlns:cs='urn:arne:cs'

Er der nogen stor forskel ?
Avatar billede tj_cuper Nybegynder
08. juni 2008 - 00:01 #9
nej men er det muligt at anvende begge på en gang? og i så fald kan der tilføjes 2x xmlns i et stylesheet?
Avatar billede arne_v Ekspert
08. juni 2008 - 00:32 #10
Ja - det kan man godt.

Rent faktisk bruger mit eksempel 2 ! et for inline og et til ekstern kode !
Avatar billede tj_cuper Nybegynder
08. juni 2008 - 11:51 #11
Ja det er da os rigtigt, mange tak for hjælpen smid en svar.

:)
Avatar billede arne_v Ekspert
08. juni 2008 - 14:49 #12
svar
Avatar billede tj_cuper Nybegynder
08. juni 2008 - 20:38 #13
Mange tak for hjælpen, fik det hele til at virke
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

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