Subject: Re: [xsl] Get value from external file From: Mike Brown <mike@xxxxxxxx> Date: Tue, 25 Feb 2003 16:11:08 -0700 (MST) |
Anders Svensson wrote: > I have an xsl file which formats xml files into html, online help etc, and > the xml has attributes at certain elements to "profile" the documents into > different versions (different formats, users, etc). The xsl creates the > profiled versions by selecting elements by their profile attributes. For > example an element can look like this: > > <ELEMENT Help='Yes'> > > The xsl can then select these particular elements by select statements such > as <xsl:apply-templates select="ELEMENT[Help='Yes']/>. > > BUT, and here's the question: I need to be able to place the profiling > select value in a separate file so I can keep the xsl intact, rather than > changing it for each version transformation. That way I only need to change > the (xml)file containing the value, and fetch it using a variable. (E.g.) > > I would like to be able to do something like this: > xml document containing the value: > <varValueElement>ELEMENT[Help='Yes']</varValueElement> You probably meant ELEMENT[@Help='Yes'] because you are talking about the attribute named Help, not the child element named Help. > In the xsl file: > <xsl:param name="varValue" select="document('varValue.xml')/varValueElement"/> > <xsl:apply-templates select="ELEMENT[Help='Yes']/> What are you trying to do here? Setting $varValue has no bearing on the behavior of that paticular apply-templates instruction. Perhaps you meant something like <xsl:apply-templates select="foo:evaluate($varValue)"/> where foo is a prefix bound to the namespace for an extension function for dynamic evaluation of strings as XPath expressions (e.g., EXSLT's dyn:evaluate())? I would approach the problem differently, though. Have a control.xml that says what profile to generate: <info> <profile>help</profile> </info> Then in your stylesheet go get that data, and make a pass through the source tree using a mode depending on what it was: <xsl:template match="/"> <xsl:variable name="profile" select="document('control.xml')/info/profile"/> <xsl:choose> <xsl:when test="$profile='help'"> <xsl:apply-templates mode="help"/> </xsl:when> <xsl:when test="$profile='apidocs'"> <xsl:apply-templates mode="apidocs"/> </xsl:when> <xsl:when test="$profile='mktg'"> <xsl:apply-templates mode="mktg"/> </xsl:when> <xsl:otherwise> <xsl:message>unknown profile '<xsl:value-of select="$profile"/>'</xsl:message> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- note: there are built-in templates matching "*" for each mode; they just contain the instruction <xsl:apply-templates mode="(the same mode"/>, resulting in the selection and processing of that element's children. --> <xsl:template match="ELEMENT[@Help='Yes']" mode="help"> ... </xsl:template> <xsl:template match="ELEMENT[@APIDocs='Yes']" mode="apidocs"> ... </xsl:template> <xsl:template match="ELEMENT[@MarketingDrivel='Yes']" mode="mktg"> ... </xsl:template> Mike -- Mike J. Brown | http://skew.org/~mike/resume/ Denver, CO, USA | http://skew.org/xml/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Get value from external file, Anders Svensson | Thread | RE: [xsl] Get value from external f, Anders Svensson |
Re: [xsl] A very basic question., S Woodside | Date | Re: [xsl] Re: The Perils of Sudden , S Woodside |
Month |