[XSL/ASP] dynamische include

Pagina: 1
Acties:

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
omdat in XSL zelf geen dynamische includes kunnen (wat overigens logisch is), heb ik maar besloten om een dynamisch gegenereerde XSL te includen. Ik probeer dit te doen door een ASP pagina te includen, welke als contenttype "text/xml" heeft. Dit werkt prima, als ik in IE die asp pagina opvraag laat ie netjes de XSL structuur zien en de source ziet er ook helemaal goed uit.
Echter wanneer ik in mn XSL <xsl:include href="layout.asp" /> gebruik, zegt ie
code:
1
Error while parsing "file:///C:/Inetpub/panv2/layout/layout.asp". A name was started with an invalid character.

Blijkbaar is de inhoud van de asp nog niet helemaal goed, maar ik kan niet bedenken wat er wel mis is...

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op zondag 26 mei 2002 12:30 schreef zoepercavia het volgende:

Blijkbaar is de inhoud van de asp nog niet helemaal goed, maar ik kan niet bedenken wat er wel mis is...
A name was started with an invalid character
;)
dat is er mis :)

en zonder code kunnen we er verder weinig mee...

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
zorry :P, even policy vergeten...
code:
1
2
3
4
5
6
7
8
9
10
11
response.contenttype="text/xml"

dim strXML
Dim HttpReq
set HttpReq = server.CreateObject("MSXML2.XMLHTTP")
      
HttpReq.open "GET", "http://testbak/layout/panacea/standaard.xsl", False
HttpReq.send
strXML = HttpReq.responseText    

Response.Write(strXML)

en in de XSL:
code:
1
<xsl:include href="../../../layout/layout.asp" />

nogmaals IE herkent hem wel als een goede XML/XSL

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Waarom open je niet direct http://testbak/layout/panacea/standaard.xsl vanuit de originele xsl :? Of begrijp ik het stuk code nu verkeerd?

Ik bedenkt me net ook dat je asp waarschijnlijk niet geprsed wordt. Als je vanuit een xsl een bestand aanroept (niet over http) zal je webserver het natuurlijk ook niet gaan parsen. Je moet dus zorgen datje asp scriptje geparsed gaat worden, dus je moet hem via je webserver aanroepen ([url="http://localhost/"]http://localhost/[/url]...... dus ;))

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
het probleem is dat die url niet vastligt, het gaat er om dat je dynamisch verschillende layouts kan instellen... ('panacea') is de layout naam, maar kan dus ook wat anders zijn.
Mijn probleem is dus: Hoe krijg ik een dynamische include in XSL? (op wat voor een manier dan ook)

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


Verwijderd

Als ik iets dynamies moet doen met een XSL laad ik die eerst in een DOM, dan zoek ik met een XPath query het elementje op wat ik wil veranderen en dan change ik dat. Daarna renderen met de XML en klaar issie..

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
ben wel iets wijzer, maar nog niet dichter bij een oplossing.

Freak wat betreft dat parsen heb je gelijk, alleen kan je geen url gebruiken bij <xsl:import> of <xsl:include>, het moet een path zijn :(

Ik weet nl zeker dat XSL gegenereerd door layout.asp goed is, kan er alleen dus nix mee in een andere XSL

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
kerrick had ik inderdaad geprobeerd, maar niet met xpath.. kan je een voorbeeldje geven hoe dat te doen?

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Mijn oplossing is dat ik de xsl ook dynamisch bouw. Die xsl bestaat dan alleen maar uit een paar <xsl:include ... /> statements. Helaas kan je hierdoor je xsl objecten niet cachen op de server, maar je kan dan wel dynamisch bepalen welke andere xsl's ge-include moeten worden.

Verwijderd

Eh gewoon..

Je doet een .SelectSingleNode("//xsl:include") op dat xml objectje met je XSL er in.

Dan krijg je een ixmlnode objectje terug en als je daar de .text of de .attributes van wijzigt is je XSL aangepast..

Als je meerdere //xsl:includes hebt kan je die node beter een ID meegeven en daar op selecten:
.SelectSingleNode("//xsl:include[@id='bladiebla']")

Overigens heb ik dat nog nooit met includes gebruikt. Ik wijzig daar vaker tekstjes mee, of counters etc.

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
hehe.. eindelijk de oplossing... dank allemaal en in het bijzonder kerrick:
code:
1
2
3
4
5
6
7
8
9
dim xsl
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath(XSLURI))
dim xsl_include, xsl_href
set xsl_include = xsl.getElementsByTagName("xsl:include")
Set xsl_href = xsl_include.item(0).getAttributeNode("href") 
xsl_href.value = "../../../layout/" & pagina_layout &  "/standaard.xsl"
Response.Write(xmldoc.transformNode(xsl))

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!

Pagina: 1