[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] XSLT 2.0 question
Subject: RE: [xsl] XSLT 2.0 question From: "Bryan Rasmussen" <bry@xxxxxxxxxx> Date: Mon, 18 Mar 2002 11:20:58 +0100 |
thanks, I'd never thought about this way to use embedded stylesheets(they always seemed sort of useless to me) but unfortunately this isn't quite what I want to do. See we're working on an application in which there will be a lot of pre-written stylesheets to do transformations into various formats, the xml will come from Word, the end-user isn't going to know what the stylesheets are called as our target audience is not very technical besides some may be internal program resources, however as we expect that some of them will know html and some simple programming we are allowing different ways to include/write code into the Word documents, one of these code types could be xslt. For many reasons too voluminous to go into here I can't change the structure of how stylesheets are run in this app, that is to say the main stylesheet needs to be the external one, I don't see anyway this could be done from xslt 1.0, although I could prob. construct a hack whereby the app reads in the xslt, reads xml document, creates a node <xsl:import name=" <<put the name of the xml document here>>"/> and then have to do some parameter checking to tell me to switch between apply-imports and apply-templates at points in the document. sounds awful, is awful, that's why it's called a hack :) also introduces the dreaded side effects, not to mention being potentially the slowest thing ever. Don't want to do anything with side effects, thought there might be some way to achieve it in xslt 2.0 without side effects. >> am wondering if it would be possible to set up solutions that do the >>following in xslt 2.0, let us say you run your xslt against an xml >> document that contains inline xslt code, perhaps just a single >> xsl:template, would there be any way, hopefully incredibly involved >> and complex :) to declare that inline templates should be run and >> take precedence over templates in the xslt. >Yep, they're called embedded stylesheets. See >http://www.w3.org/TR/xslt#section-Embedding-Stylesheets in XSLT 1.0 or >http://www.w3.org/TR/xslt20/#embedded in the XSLT 2.0 WD. >Say that your stylesheet was called 'stylesheet.xsl', you could do: ><doc> > <person>...</person> > <xsl:stylesheet version="1.0" id="stylesheet" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:import href="stylesheet.xsl" /> > <xsl:template match="person"> > do something > </xsl:template> > </xsl:stylesheet> ></doc> >If you use the embedded stylesheet (accessing it by its ID), then it >imports your main stylesheet (stylesheet.xsl) and overrides its >content in just the same way as importing a stylesheet does normally. >So your local style information for the person element has priority. >To make this work, you have to declare the id attribute on >xsl:stylesheet as an ID attribute, so the top of the document will >probably actually look like: ><?xml version="1.0"?> ><!DOCTYPE doc [ ><!ELEMENT xsl:stylesheet ANY> ><!ATTLIST xsl:stylesheet id ID #REQUIRED> >]> ><?xml-stylesheet type="text/xsl" href="#stylesheet"?> ><doc> > <person>...</person> > <xsl:stylesheet version="1.0" id="stylesheet" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:import href="stylesheet.xsl" /> > <xsl:template match="person"> > do something > </xsl:template> > </xsl:stylesheet> ></doc> Cheers, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XSLT 2.0 question, Jeni Tennison | Thread | Re: [xsl] XSLT 2.0 question, Jeni Tennison |
RE: [xsl] Newbie: using translate, Jarno . Elovirta | Date | Re: [xsl] general purpose filter st, David Carlisle |
Month |