Avatar billede bierchen Nybegynder
20. februar 2003 - 09:43 Der er 47 kommentarer og
1 løsning

Overføre variabel fra ASP til XSLT

Hej :)

Jeg har en variabel i min ASP kode, som jeg godt kunne tænke mig at overføre til mit XSLT.

Min variabel hedder strurl og den indeholder stien til den side vi arbejder med. f.eks http://196.97.65.2

Når jeg så i mit stylesheet generer min URL ud fra en værdi i XML filen, f.eks "HOST", så kunne jeg godt tænke mig at overføre værdien fra ASP koden, og få Stylesheetet til at tilføje nogle værdier fra min XML fil, så at resultatet bliver noget lignende:

<a href="http://196.97.65.2?host=21">Computer 1</a>

Lige nu skriver den bare variablens navn i min kode:

a><xsl:attribute name="href">strurl?host=<xsl:value-of select="ADR"/></xsl:attribute><xsl:value-of select="BETEG" /></a><br/>
Avatar billede ehf Nybegynder
20. februar 2003 - 09:46 #1
Kan xsl:param ikke bruges?
Avatar billede bierchen Nybegynder
20. februar 2003 - 09:53 #2
Hvordan anvender jeg den ?
Avatar billede ehf Nybegynder
20. februar 2003 - 10:03 #3
I et style sheet som følger:
..
<xsl:stylesheet ......>
<xsl:output .....>
<xsl:param name="X">default value</xsl:param>

Du kan så i programmet bruge X med $X.

Når du applier dit style sheet med fx. saxon:
......icl.saxon -o output.xml source.xml style.xsl X=value

vil $X have værdien "value"
Avatar billede bierchen Nybegynder
20. februar 2003 - 10:11 #4
Kan jeg få dig til at give mig eksemplet, hvor du anvender min ovenstående streng. (De forsøg jeg har lavet fejler :(  )

I min ASP kode kalder jeg mit stylesheet med:
objxsl.load(Server.MapPath("enhxmlstyle.xsl"))

Er det her du mener jeg skal indsætte min variabel ?? Og hvordan ?
Avatar billede ehf Nybegynder
20. februar 2003 - 10:26 #5
Nu er jeg så heldig at jeg ikke arbejder med ASP
Så hvordan man applier et style sheet til en xml fil i ASP (eller VB)
er jeg ikke klar over. Men jeg er rimeligt overbevist om at det kan lade
sig gøre.
Avatar billede bierchen Nybegynder
20. februar 2003 - 10:34 #6
Det har jeg løst.

Men den variabel som jeg anvender i min ASP kode, ønsker jeg at overføre til mit XSL stylesheet. Sådan at jeg fra mit Stylesheet retunerer noget HTML der minder om href://Variabel + <xsl:value-of select="BETEG" />
Avatar billede ehf Nybegynder
20. februar 2003 - 10:48 #7
<xsl:value-of select="concat('href://', $X, ./BETEG)"/>

Jeg går ud fra at BETEG er et child element til current element.
Avatar billede Slettet bruger
20. februar 2003 - 11:13 #8
Check XMLObject() -  det er skræddersyet til at simplificere ASP -> XML/XLT opgaver:

http://www.greystate.dk/xmlobject/

/CS
Avatar billede bierchen Nybegynder
20. februar 2003 - 11:15 #9
BETEG er er et child element !

Jeg forstår ikke hvad concat gør ???

Min kode ser ud som nedenstående. men det fejler stadig ?

<xsl:template match="/">
<xsl:param name="strurl">default value</xsl:param>
...
....
<a><xsl:value-of select="(concat'href://',$strurl,,/BETEG)"/><xsl:value-of select="BETEG" /></a>

Den sidste "xsl:value-of select="BETEG" />" Er for at den skal skrive linket som den værdi BETEG indeholder.
Avatar billede bierchen Nybegynder
20. februar 2003 - 11:19 #10
Hvis jeg forsøger at indsætte "<xsl:param name="strurl">default value</xsl:param>" allerøverst i mit XSL dokument, efter <xsl:stylesheet.....>

Så får jeg følgende fejlmeddelse "Nøgleordet xsl:param må ikke bruges i navneområdet"
Avatar billede bierchen Nybegynder
20. februar 2003 - 11:22 #11
>>Greystate<<

Jeg fandt din henvisning i et andet spørgsmål herinde, men på din side kunne jeg ikke finde et eksempel der viste åbenbaringen for mit problem ! :)

Har du mulighed for at kaste et eksempel herinde ??
Avatar billede ehf Nybegynder
20. februar 2003 - 11:24 #12
concat er en funktion i xsl som joiner strenge.
concat(string, string, string*)
Avatar billede atoft Nybegynder
20. februar 2003 - 11:26 #13
Hvis du ville kunne bruge xsl:param, skal du lave en xslt processor, og det gøres på følgende måde:

    var xslt = new ActiveXObject("Msxml2.XSLTemplate");
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
    var xslProc;
   
    xslDoc.async = false;
    xslDoc.load(strURLxslt);
    xslt.stylesheet = xslDoc;
    xslProc = xslt.createProcessor();

Derefter sætter du din parameter:

        xslProc.addParameter("minUrl",dinASPVariabel);

Nu sætter du så dit xml:
Avatar billede bierchen Nybegynder
20. februar 2003 - 11:27 #14
Hvor skal jeg indsætte min <xsl:param name="strurl">default value</xsl:param> ?
Avatar billede atoft Nybegynder
20. februar 2003 - 11:27 #15
som

    xslProc.input = dinXMLDom;

kør transform
   
    xslProc.transform();

    var html = xslProc.output;
Avatar billede atoft Nybegynder
20. februar 2003 - 11:30 #16
din xsl:param skal være et barn til xsl:stylesheet elementet
Avatar billede bierchen Nybegynder
20. februar 2003 - 11:42 #17
Min samlede kode ser sådan her ud.

Hvor skal xsl:param stå, og står den del der generer linket rigtigt ?

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  <xsl:template match="/">   
    Beskrivelse<br/>           
      <xsl:for-each select="/RESPONSE">
      <xsl:choose>
          <xsl:when match=".[HOST='0']">           
            <a><xsl:value-of select="(concat'href://',$strurl,/ADR)"/> <xsl:value-of select="BETEG" /></a><br/>
        </xsl:when>
        <xsl:otherwise>                         
          <a><xsl:attribute name="href">strurl?host=<xsl:value-of select="ADR"/></xsl:attribute><xsl:value-of select="BETEG" /></a><br/>
        </xsl:otherwise>
      </xsl:choose>
      </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
Avatar billede bierchen Nybegynder
20. februar 2003 - 11:47 #18
Min ASP kode ser sådan ud:

Hvordan skal jeg omskrive den så den anvender XSLT processoren ?

<%
strURL = 192.168.1.100 & server.urlencode(QueryData)

Set objxml = CreateObject("MSXML2.DOMDocument.3.0")
objxml.async = false
objxml.setProperty "ServerHTTPRequest", true
strxml = objxml.Load(strURL)

set objxsl = Server.CreateObject("MSXML2.DOMDocument.3.0")
objxsl.async = false
objxsl.load(Server.MapPath("enhxmlstyle.xsl"))

Response.write (objxml.transformNode(objxsl))
%>
Avatar billede atoft Nybegynder
20. februar 2003 - 12:05 #19
du har 2 muligheder enten bruge den metode, som jeg har beskrevet tilligere eller modificere dit xslt via dom-en. Altså gå finde din xsl:value via en xpart også ændre din select attribute på den.
Avatar billede bierchen Nybegynder
20. februar 2003 - 12:09 #20
Kan du ikke omskrive dit forslag så det passer med min kode. Jeg har set mig blindt på det.
Avatar billede atoft Nybegynder
20. februar 2003 - 12:52 #21
Ok så prøver jeg. Men bær over med mig hvis der skulle mangle en VBScript set nogle stedet. Jeg bruger mest javascript.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:param name="strurl">har du en default url skriv den her.</xsl:param>
  <xsl:template match="/">   
    Beskrivelse<br/>           
      <xsl:for-each select="/RESPONSE">
      <xsl:choose>
          <xsl:when match=".[HOST='0']">           
            <a><xsl:value-of select="(concat'href://',$strurl,/ADR)"/> <xsl:value-of select="BETEG" /></a><br/>
        </xsl:when>
        <xsl:otherwise>                         
          <a><xsl:attribute name="href">strurl?host=<xsl:value-of select="ADR"/></xsl:attribute><xsl:value-of select="BETEG" /></a><br/>
        </xsl:otherwise>
      </xsl:choose>
      </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>


Din asp kode skal se således ud:

<%
strURL = 192.168.1.100 & server.urlencode(QueryData)

Set objxml = CreateObject("MSXML2.DOMDocument.3.0")
objxml.async = false
objxml.setProperty "ServerHTTPRequest", true
strxml = objxml.Load(strURL)

set objxslproc = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
objxsl.async = false
objxsl.load(Server.MapPath("enhxmlstyle.xsl"))

set xslTemplate = Server.CreateObject("MSXML2.XSLTemplate")
xslTemplate.stylesheet = objxsl
xslProc = xslTemplate.createProcessor()

xslProc.addParameter("strurl",dinASPVariabel)

xslProc.input = objxml
xslProc.transform()
Response.write (xslProc.output)
%>
Avatar billede bierchen Nybegynder
20. februar 2003 - 13:06 #22
Den melder fejlen "Cannot use parentheses when calling a Sub" Og refererer til linien hvor vi kalder xslProc.addParameter("strurl",strURL)
Avatar billede atoft Nybegynder
20. februar 2003 - 13:09 #23
Så skal det sikkert ændres til

xslProc.addParameter "strurl", strURL
Avatar billede bierchen Nybegynder
20. februar 2003 - 16:24 #24
Jeg kan ikke få det til at virke

Er der der nogen som kan poste et kort eksempel herinde, med deres egen XML, XSL og ASP kode.
Avatar billede atoft Nybegynder
21. februar 2003 - 09:49 #25
Fejler den stadig. Eller er outputtet forkert?
Avatar billede bierchen Nybegynder
21. februar 2003 - 10:17 #26
Den fejler stadig
Avatar billede atoft Nybegynder
21. februar 2003 - 10:39 #27
Hvor fejler den og hvad er fejl meddelelsen.
Avatar billede bierchen Nybegynder
21. februar 2003 - 11:03 #28
Jeg har vedlagt kode, XML og XSL fil. Det burde kunne simulere hvad jeg vil.
Filerne gemmes i den samme mappe, og når man så afvikler index.asp burde Computernavnene dukke op som et link, der henviser til et link + host nr.

Men den melder en Intern ASP fejl nu.

Prøver jeg at angive stylesheetet i min xml fil, så kommer flg. fejl når jeg åbner xml filen:
Nøgleordet xsl:param må ikke bruges i navneområdet http://www.w3.org/TR/WD-xsl.

ASP kode: index.asp


<html>
<body>
<%
Dim xslt As New Msxml2.XSLTemplate
Dim xslDoc As New Msxml2.FreeThreadedDOMDocument
Dim xmlDoc As New Msxml2.DOMDocument
Dim xslProc As IXSLProcessor
xslDoc.async = False
xslDoc.resolveExternals = False
xslDoc.load "style.xsl"
Set xslt.stylesheet = xslDoc
xmlDoc.async = False
xmlDoc.resolveExternals = False
xmlDoc.Load "comp.xml"
Set xslProc = xslt.createProcessor()
xslProc.input = xmlDoc
xslProc.addParameter "strurl", "192.168.1.100"
xslProc.Transform
MsgBox xslProc.output
%>

</body>
</html>


StyleSheet: style.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:param name="strurl">har du en default url skriv den her.</xsl:param>
  <xsl:template match="/">   
    Beskrivelse<br/>           
      <xsl:for-each select="/SVAR/RESPONSE">
      <xsl:choose>
          <xsl:when match=".[HOST='0']">           
            <a><xsl:value-of select="(concat'href://',$strurl,/ADR)"/> <xsl:value-of select="BETEG" /></a><br/>
        </xsl:when>
        <xsl:otherwise>                         
          <a><xsl:attribute name="href">strurl?host=<xsl:value-of select="ADR"/></xsl:attribute><xsl:value-of select="BETEG" /></a><br/>
        </xsl:otherwise>
      </xsl:choose>
      </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>


XML Fil:  comp.xml
<?xml version="1.0" encoding="windows-1252"?>
<?xml:stylesheet type="text/xsl"?>
<SVAR>
    <RESPONSE>
        <HOST>0</HOST>
        <ADR>8</ADR>
        <BETEG>Router</BETEG>
    </RESPONSE>
    <RESPONSE>
        <HOST>8</HOST>
        <ADR>10</ADR>
        <BETEG>Computer1</BETEG>
    </RESPONSE>
    <RESPONSE>
        <HOST>8</HOST>
        <ADR>12</ADR>
        <BETEG>computer2</BETEG>
    </RESPONSE>
</SVAR>
Avatar billede atoft Nybegynder
21. februar 2003 - 11:07 #29
Ok det er fordi du bruger et forkert namespace.

du skal bruge.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

istedet for

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

http://www.w3.org/TR/WD-xsl er en simistandard fra microsoft.
Avatar billede bierchen Nybegynder
21. februar 2003 - 11:08 #30
Sorry ASP koden var forkert, det var noget jeg fandt til VB inde på microsofts hjemmeside, som jeg ville forsøge mig med.

Her er den rigtige ASP kode.


<html>
<body>
<%
strURL = 192.168.1.100

Set objxml = CreateObject("MSXML2.DOMDocument.3.0")
objxml.async = false
load(Server.MapPath("comp.xml"))

set objxslproc = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
objxsl.async = false
objxsl.load(Server.MapPath("style.xsl"))

set xslTemplate = Server.CreateObject("MSXML2.XSLTemplate")
xslTemplate.stylesheet = objxsl
xslProc = xslTemplate.createProcessor()

xslProc.addParameter("strurl",strURL)

xslProc.input = objxml
xslProc.transform()
Response.write (xslProc.output)
%>

</body>
</html>
Avatar billede bierchen Nybegynder
21. februar 2003 - 11:13 #31
Fedt !! Det hjalp en del, men nu kommer den med flg fejl.
Attributten 'match' er ugyldig i 'xsl:when'.
Avatar billede atoft Nybegynder
21. februar 2003 - 11:29 #32
Det er fordi den hedder test i stedet for match nu.
Avatar billede bierchen Nybegynder
21. februar 2003 - 11:43 #33
Jeg kan mærke du er lidt skrap til det her !!!!!

Min kode ser nu sådan ud:
<?xml version="1.0" encoding="UTF-8"?>
<?xmlspysamplexml M:\wap\temp\comp.xml?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">   
    Beskrivelse<br/>
        <xsl:for-each select="/SVAR/RESPONSE">
            <xsl:choose>
                <xsl:when test="HOST='0'">
                    <a>
                        <xsl:value-of select="(concat'href://',$strurl,/ADR)"/>
                        <xsl:value-of select="BETEG"/>
                    </a>
                    <br/>
                </xsl:when>
                <xsl:otherwise>
                    <a>
                        <xsl:attribute name="href">strurl?host=<xsl:value-of select="ADR"/></xsl:attribute>
                        <xsl:value-of select="BETEG"/>
                    </a>
                    <br/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Men nu kommer fejlen

Forventede token ')', fandt 'STRING'. (concat-->'href://'<--,$strurl,/ADR)
Avatar billede atoft Nybegynder
21. februar 2003 - 12:19 #34
Det er din concat som er forkert.

ret den til

<xsl:value-of select="concat('href://',$strurl,/ADR)"/>
Avatar billede bierchen Nybegynder
21. februar 2003 - 13:28 #35
Nu rykker stylesheetet !!!!

Men når jeg forsøger at afvikle min index.asp, så kommer der en intern server fejl. Asp koden ser sådan ud:

<html>
<body>
<%

strURL = 192.168.1.100

Set objxml = CreateObject("MSXML2.DOMDocument.3.0")
objxml.async = false
load(Server.MapPath("comp.xml"))

set objxslproc = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
objxsl.async = false
objxsl.load(Server.MapPath("style.xsl"))

set xslTemplate = Server.CreateObject("MSXML2.XSLTemplate")
xslTemplate.stylesheet = objxsl
xslProc = xslTemplate.createProcessor()

xslProc.addParameter("strurl",strURL)

xslProc.input = objxml
xslProc.transform()
Response.write (xslProc.output)
%>

</body>
</html>
Avatar billede bierchen Nybegynder
21. februar 2003 - 13:40 #36
Jeg har rettet lidt i koden, så referencerne til objxslproc er ens over det hele, men det har ikke hjulpet endnu.

<html>
<body>
<%
strURL = 192.168.1.100

Set objxml = CreateObject("MSXML2.DOMDocument.3.0")
objxml.async = false
load(Server.MapPath("comp.xml"))

set objxslproc = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
objxsl.async = false
objxsl.load(Server.MapPath("style.xsl"))

set xslTemplate = Server.CreateObject("MSXML2.XSLTemplate")
xslTemplate.stylesheet = objxsl

objxslproc = xslTemplate.createProcessor()
objxslproc.addParameter("strurl",strURL)
objxslproc.input = objxml
objxslproc.transform()
Response.write (objxslproc.output)
%>
</body>
</html>
Avatar billede atoft Nybegynder
21. februar 2003 - 13:46 #37
Kan du sige noget om hvor den fejl og hvad den siger?
Avatar billede bierchen Nybegynder
21. februar 2003 - 13:48 #38
Har du adgang til Windows Internet Server ?

Den melder flg. fejl.
HTTP 500 - Intern serverfejl
Internet Explorer
Avatar billede atoft Nybegynder
21. februar 2003 - 14:05 #39
Ja det har jeg. Du vil gerne have mig til at teste det. Så pyt da :-)
Avatar billede bierchen Nybegynder
21. februar 2003 - 14:07 #40
TAKKER !!!! :)))

Jeg har ellers lige lagt det ud så du kan se det på den server hvor jeg har det kørende. Det kører på test.ri1264.dk
Avatar billede bierchen Nybegynder
21. februar 2003 - 14:08 #41
Hvad for et udviklingsværktøj bruger du til at skrive XML og ASP i ?
Avatar billede atoft Nybegynder
21. februar 2003 - 14:17 #42
Her kommer det så

Stylesheet

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="strurl"></xsl:param>
    <xsl:template match="/">   
    Beskrivelse<br/>
        <xsl:for-each select="/SVAR/RESPONSE">
            <xsl:choose>
                <xsl:when test="HOST='0'">
                    <a>
                        <xsl:value-of select="concat('href://',$strurl,/ADR)"/>
                        <xsl:value-of select="BETEG"/>
                    </a>
                    <br/>
                </xsl:when>
                <xsl:otherwise>
                    <a>
                        <xsl:attribute name="href">strurl?host=<xsl:value-of select="ADR"/></xsl:attribute>
                        <xsl:value-of select="BETEG"/>
                    </a>
                    <br/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>


ASP kode

<%@ Language=VBScript %>
<html>
<body>
<%

strURL = "192.168.1.100"

Set objxml = CreateObject("MSXML2.DOMDocument.3.0")
objxml.async = false
objxml.load(Server.MapPath("comp.xml"))

set objxsl = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
objxsl.async = false
objxsl.load(Server.MapPath("style.xsl"))

set xslTemplate = Server.CreateObject("MSXML2.XSLTemplate")
xslTemplate.stylesheet = objxsl
set xslProc = xslTemplate.createProcessor()

xslProc.addParameter "strurl", strURL

xslProc.input = objxml
xslProc.transform()
Response.write (xslProc.output)
%>

</body>
</html>
Avatar billede atoft Nybegynder
21. februar 2003 - 14:22 #43
Jeg bruger xmlspy og visualInterdev.
Avatar billede bierchen Nybegynder
21. februar 2003 - 14:32 #44
Det virker for godt !!!!!

Mange tak for hjælpen og Tålmodigheden !!!!
Avatar billede atoft Nybegynder
21. februar 2003 - 14:38 #45
Ja da og god weekend
Avatar billede atoft Nybegynder
21. februar 2003 - 14:39 #46
og tak for de ekstra 20 points
Avatar billede bierchen Nybegynder
21. februar 2003 - 16:33 #47
!! Problem !!

Jeg skal bruge det i et WAP-Interface.

Og når jeg laver mit stylesheet med http://www.w3.org/1999/XSL/Transform Så Virker det ikke med Wap

Men skriver jeg istedet: http://www.w3.org/TR/WD-xsl  Så virker det mit øvrige kode, men ikke det vi har arbejdet på med ASP Variablen. ASP koden er inkluderet i min .wml kode.

Har du et bud ??

Og hvor kan jeg evt læse noget om de forskellige fortolkere ??
Avatar billede atoft Nybegynder
05. marts 2003 - 11:17 #48
Jeg forstår ikke helt. Men husker du at sættet content-type op på din ASP-side?
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