Subject: Re: [xsl] how to applied "xpath-default-namespace" within call templates From: Michael Kay <mike@xxxxxxxxxxxx> Date: Sun, 17 Jun 2012 11:53:04 +0100 |
Michael Kay Saxonica
Hi All, I am not able to get below "required output". I am getting below error by Oxygen. It is necessary to include "xpath-default-namespace="http://www.elsevier.com/xml/bk/dtd" as one of the attribute of<xsl:stylesheet>.
Frror: E [Saxon-PE 9.3.0.5] Required item type of value of variable $attributes is {http://www.elsevier.com/xml/bk/dtd}attribute; supplied value has item type element(attribute, {http://www.w3.org/2001/XMLSchema}untyped)
Input <chapter docsubtype="chp" id="chapter1" version="5.2" xml:lang="en" xmlns="http://www.elsevier.com/xml/bk/dtd" xmlns:ce="http://www.elsevier.com/xml/common/dtd" xmlns:sb="http://www.elsevier.com/xml/common/struct-bib/dtd"> <ce:table id="para1" frame="topbot" rowsep="0" colsep="0">....</ce:table> </chapter>
Stylesheet
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ce="http://www.elsevier.com/xml/common/dtd"
xmlns:sb="http://www.elsevier.com/xml/common/struct-bib/dtd"
xpath-default-namespace="http://www.elsevier.com/xml/bk/dtd" exclude-result-prefixes="xs xsd ce sb " version="2.0">
<xsl:template match="ce:table"> <p> <xsl:call-template name="collate-attributes"> <xsl:with-param name="attributes" as="element(attribute)+"> <attribute name="frame" display="para Frame" other-values="top, all, none, topbot, sides, bottom"/> </xsl:with-param> </xsl:call-template> <xsl:apply-templates/> </p> </xsl:template>
<xsl:template name="collate-attributes"> <xsl:param name="attributes" required="yes" as="element(attribute)*"/> <xsl:variable name="here" select="."/> <xsl:attribute name="showattrib"> <xsl:for-each select="$attributes"> <xsl:variable name="name" select="@name"/> <xsl:variable name="display" select="@display"/> <xsl:variable name="there" select="$here/@*[name() eq $name]"/> <xsl:if test="not(position() eq 1)">|</xsl:if> <xsl:value-of select="$name"/> <xsl:text>@</xsl:text> <xsl:value-of select="$display"/> <xsl:text>:</xsl:text> <xsl:value-of select="$there"/> <xsl:for-each select="tokenize(@other-values,';')[not(. eq $there)]"> <xsl:value-of select="concat(';',.)"/> </xsl:for-each>
</xsl:for-each> </xsl:attribute> </xsl:template> </xsl:stylesheet>
Required Output: <p showattrib="frame@para Frame:topbot;top, all, none, topbot, sides, bottom">....</p>
Thanks ...JSR
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] how to applied "xpath-default, Joga Singh Rawat | Thread | RE: [xsl] how to applied "xpath-def, Joga Singh Rawat |
[xsl] how to applied "xpath-default, Joga Singh Rawat | Date | RE: [xsl] how to applied "xpath-def, Joga Singh Rawat |
Month |