Toon posts:

[XSL] Uitdaging: extentions in MSXML3 & Xalan

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik gebruik het volgende xsl zowel in Xalan als MSXML3. Het vervelende is nu dat ik op deze manier het javascript 2 keer in het stylesheet moet zetten.

Weet iemand een manier om dit te voorkomen?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:lxslt="http://xml.apache.org/xslt"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:js="http://www.interspective.nl/js">
    
  <lxslt:component prefix="js" functions="getDays">
    <lxslt:script lang="javascript">
    function getDays(month, date)
    {
      if (month == "" || date == "")
        return 40000000000;
    
      month = parseInt(month, 10);
      date  = parseInt(date, 10);
      
      now = new Date();
      nowYear  = now.getFullYear();
      nowMonth = now.getMonth() + 1;
      nowDate  = now.getDate();
      year = nowYear;
      
      if (month &lt; nowMonth || 
         (month == nowMonth &amp;&amp; date &lt; nowDate))
        year++;
        
      then = new Date(year, month - 1, date);
      
      divMillis = then.getTime() - now.getTime();
      
      return divMillis;
    }
    </lxslt:script>
  </lxslt:component>
    
  <msxsl:script language="JScript" implements-prefix="js">    
    function getDays(month, date)
    {
    if (month == "" || date == "")
      return 40000000000;

    month = parseInt(month, 10);
    date  = parseInt(date, 10);

    now = new Date();
    nowYear  = now.getFullYear();
    nowMonth = now.getMonth() + 1;
    nowDate  = now.getDate();
    year = nowYear;

    if (month &lt; nowMonth || 
        (month == nowMonth &amp;&amp; date &lt; nowDate))
      year++;

    then = new Date(year, month - 1, date);

    divMillis = then.getTime() - now.getTime();

    return divMillis;
    }
  </msxsl:script>
  
  <xsl:template match="/">
    <xsl:apply-templates select="*"/>
  </xsl:template>
  
  <xsl:template match="*">
    <xsl:element name="{name(.)}">
    <xsl:for-each select="@*">
      <xsl:attribute name="{name(.)}">
        <xsl:value-of select="."/>
      </xsl:attribute>
    </xsl:for-each>
    <xsl:apply-templates select="*" mode="child">
      <xsl:sort 
        select="js:getDays(string(birthDate/month), string(birthDate/day))" 
        data-type="number" 
        order="ascending"/>
    </xsl:apply-templates>
    </xsl:element>
  </xsl:template>
  
  <xsl:template match="*" mode="child">
    <xsl:element name="{name(.)}">
    <xsl:for-each select="@*">
      <xsl:attribute name="{name(.)}">
        <xsl:value-of select="."/>
      </xsl:attribute>
    </xsl:for-each>
    <xsl:copy-of select="*"/>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

maaaaaaaaaaaaaarttttttttttttttiiiiiiiiiiinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn :+

sorry kan het niet laten
je moet ff w88 op mbravenboer (of tomato)
</ot>

Doet iets met Cloud (MS/IBM)


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Ik geloof dat ik de perfecte manual voor XML voor jou heb :)
De MSXML documentatie van Microsoft te downen op http://msdn.microsoft.com. Veel plezier ! Kben net begonnen met XSL en XML maar 't gaat al redelijk, maar ik ben bang je vraag niet te kunnen oplossen :) Toch maar ff op mbravenboer wachten :+

Verwijderd

Topicstarter
De microsoft docs ken ik wel natuurlijk, maar die beschrijven niet hoe je hun software combineert met het gratis apache alternatief. Zoals te verwachten is natuurlijk van M$. :)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Mwah, wat zegt het W3C ??? :) Niet dat MS zich daaraan houdt maar toch wel handig om te weten ;)

Verwijderd

Topicstarter
Het w3c zegt helemaal niets over extentions omdat die niet onderdeel zijn van de XSL standaard. Dat is gelijk de oorzaak van mijn probleem.

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 20:50

OMX2000

By any means necessary...

Hmmmmm dit is lastig... Je wil waarschijnlijk maar 1 stylesheet gebruiken... je kunt in xsl ook verwijzen naar externe bestanden, zodat het stukje javascript, "ge-include" wordt... ik weet zo de tag niet uit mijn hoofd, maar ik denk dat je in die richting moet denken

Dè developers podcast in je moerstaal : CodeKlets Podcast


  • tomato
  • Registratie: November 1999
  • Niet online
Ik zou inderdaad je javascript in een aparte file zetten.

Verwijderd

Topicstarter
Includen is geen optie, je kan namelijk alleen xsl:template elementen gebruiken uit een ander bestand.

Ik heb dit geprobeerd:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<msxsl:script language="JScript" implements-prefix="js">
  //<lxslt:component prefix="js" functions="getDays">
  //  <lxslt:script lang="javascript">
      function getDays(month, date)
      {
        if (month == "" || date == "")
        return 40000000000;

        month = parseInt(month, 10);
        date  = parseInt(date, 10);

        now = new Date();
        nowYear  = now.getFullYear();
        nowMonth = now.getMonth() + 1;
        nowDate  = now.getDate();
        year = nowYear;

        if (month &lt; nowMonth || 
          (month == nowMonth &amp;&amp; date &lt; nowDate))
        year++;

        then = new Date(year, month - 1, date);

        divMillis = then.getTime() - now.getTime();

        return divMillis;
      }
  //  </lxslt:script>
  //</lxslt:component>
</msxsl:script>

Dat werkt in Xalan, maar MSXML3 gaat over zijn nek van de onbekende elementen binnen de msxml:script tag. Is er een manier om elementen te laten negeren door MSXML3?

Andersom, dus de MS tag in de Xalan tag werkt niet, want dan vindt MSXML3 de msxml:script tag niet meer.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Eerlijk gezegd denk ik niet echt dat hier een volledige oplossing voor zal zijn. Extensions zijn eigenlijk behoorlijk XSL processor specifiek. Dat je nu zelfs al het nog vrij engine-onafhankelijke Javascript apart moet opnemen is natuurlijk heel erg vervelend :( . Je kan in ieder geval geen XML element maken wat in twee namespaces zit, dus ik geef de uitdaging door :) .

Je zou natuurlijk wel de templates van het extension specifieke deel in een aparte file kunnen zetten, maar veel voegt dat ook niet toe.

Misschien dat je iets meer engine onafhankelijk kan werken met een niet Javascript extension... Deze specificatie daarvan is iets beter gestandaardiseerd.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hier staat een goed artikel over extensions. Als het mogelijk is, moet je hier de oplossing kunnen vinden :)

http://www-106.ibm.com/developerworks/library/x-extxslt/?n-x-10111

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • tomato
  • Registratie: November 1999
  • Niet online
mbravenboer: Hier staat een goed artikel over extensions. Als het mogelijk is, moet je hier de oplossing kunnen vinden :)
Goed artikel (tsja, O'Reilly, wat wil je ;)), maar ik vind er geen oplossing voor HH's probleem.

Ik heb daarstraks ook nog een tijd gezocht, maar ik ben bang dat er op dit moment geen mogelijkheid is om het script een keer neer te zetten en door verschillende processors te laten gebruiken ;(

(Zie jezelf als pionier, dan klinkt het allemaal nog wat positief ;))

Verwijderd

Topicstarter
Dank voor de hulp!

Het artikel lost mijn probleem op dezelfde voor de hand liggende manier op.

De netste oplossing die ik tot nu toe bedacht heb is alle elementen in de lxslt namespace vervangen door hun text waarde voordat de template naar MSXML3 gaat.

Verwijderd

Topicstarter
Op zaterdag 01 december 2001 07:12 schreef mbravenboer het volgende:
Misschien dat je iets meer engine onafhankelijk kan werken met een niet Javascript extension... Deze specificatie daarvan is iets beter gestandaardiseerd.
MSXML3 ondersteunt bij mijn weten alleen extensions via de msxml:script tag. Dus ik vraag me af of dat een oplossing is.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
HH: MSXML3 ondersteunt bij mijn weten alleen extensions via de msxml:script tag. Dus ik vraag me af of dat een oplossing is.
Hum ja, dan kan dat inderdaad niet. Jammer ;( . De extensions in Xalan vind ik dan een stuk leuker :) . Ik ben niet zo op de hoogte van de MSXML stuff...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op zaterdag 01 december 2001 12:07 schreef mbravenboer het volgende:

De extensions in Xalan vind ik dan een stuk leuker :) .
Helemaal mee eens. Alleen is Xalan niet de meest voor de hand liggende keus als je een XSL transformatie wil doen in IE. Om m'n gebruikers nou een applet te laten downloaden met Xerces, Xalan, bsf en Rhino gaat wat ver. :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
HH: Alleen is Xalan niet de meest voor de hand liggende keus als je een XSL transformatie wil doen in IE.
Uiteraard niet :) . Xalan moet je natuurlijk server-side toepassen. Client-side via een applet lijkt mij een tamelijk merkwaardige bedoeling :o .

Eventueel zou het nog wel met de weblets van IBM kunnen, dat zou nog best mooi werken :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1