xsl-list
[Top] [All Lists]

[Fwd: Re: Re: Using a variable in XSLT]

2003-09-04 04:10:05
Hi,
I am still needing your help.

I want to transform a xsd file that contains documentation in multiple 
languages. Source Example
        <xs:element name="account" type="Account">
                <xs:annotation>
                        <xs:documentation xml:lang="en">This is the English 
general description
                                <sys:one>That's the special purpose description for 
system 1</sys:one>
                                <sys:two>That's the special purpose description for 
system 2</sys:two>
                      </xs:documentation>
                        <xs:documentation xml:lang="de">Das ist die deutsche 
allgemeneine Beschreibung.
                                <sys:one>Das ist die spezielle Beschreibung für 
System 1</sys:one>
                                <sys:two>Das ist die spezielle Beschreibung für System 
2</sys:two>                     </xs:documentation>
                </xs:annotation>
        </xs:element>

I would like to be able to choose a language. Such that all documentation 
elements but those in the selected language are erased.
I also would like to be able to choose a sys. Such that only the selected sys 
is present in the output.


The result file should like this.
        <xs:element name="account" type="Account">
                <xs:annotation>
                        <xs:documentation xml:lang="de">
                                Das ist die spezielle Beschreibung für System 1
                        </xs:documentation>
                </xs:annotation>
        </xs:element>

Currently my stylesheet that only gets part of the result looks like this.

Thanks in advance
TMS

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:sys="http://www.you-know-who.com/2003/systems";
version="1.0">

<xsl:param name="SystemSelected" select="'sys:ARTS'" />
<xsl:param name="lang" select="'de'" />

<xsl:output method="xml" indent="yes"/>

<xsl:template match='/'>
        <xsl:apply-templates/>
</xsl:template>

<!-- This is to take out the documentation in all but the selected language -->
<!-- Would be nice to use a variable here -->
<xsl:template match="//xs:annotation/xs:documentation[not(lang('de'))]" 
priority="2"/>
<!-- This is to select the SelectedLanguage and the SelectedSystem and to take it 
one level higher -->

<!-- This doesn't deliver the expected result. In particular because 
xs:documentation is not present in the output anymore -->
<xsl:template match="//xs:annotation/xs:documentation">
<xsl:apply-templates select="self::*[lang($lang)]/*[name()=$SystemSelected]"/>
</xsl:template>


<xsl:template match='@* | node()' priority="-1">
        <xsl:copy>
                <xsl:apply-templates select='@* | node()'/>
        </xsl:copy>
</xsl:template>

</xsl:stylesheet>





Regards







XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>