|
Subject: Re: [xsl] copy attributes modifying their values, regardless of their names From: TW <zupftom@xxxxxxxxxxxxxx> Date: Sat, 4 Dec 2010 21:00:54 +0100 |
Yay, that's of course it! I feel relieved and embarrassed at the same
time. I thought attribute value templates were only possible in
literal result elements.
Thanks a lot!
Thomas W.
2010/12/4 Emmanuel Bigui <eb@xxxxxxxxxx>:
> Hi,
>
> Wouldn't this work:
>
> <xsl:template match="*">
> <xsl:copy>
> <xsl:for-each select="@*">
> <xsl:attribute name="{name()}">
> <xsl:call-template name="modify"/>
> </xsl:attribute>
> </xsl:for-each>
> <xsl:apply-templates/>
> </xsl:copy>
> </xsl:template>
>
> ...?
> Regards,
> EB
>
>
> On Sat, Dec 4, 2010 at 8:45 AM, TW <zupftom@xxxxxxxxxxxxxx> wrote:
>> Hi all,
>>
>> I'm generating XSL stylesheets using XSL. One thing I want to do is
>> modify all attribute value templates found in the source document. I
>> thought something like this would do the job:
>>
>> <stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
>> <template name="modify-attribute-value-templates">
>> Create replacement value
>> </template>
>>
>> <template match="*">
>> <copy>
>> <for-each select="@*">
>> <copy>
>> <call-template name="modify-attribute-value-templates"/>
>> </copy>
>> </for-each>
>> <apply-templates/>
>> </copy>
>> </template>
>> </stylesheet>
>>
>> But much to my chagrin I realized that <copy> already copies the value
>> if applied to attributes. A workaround could be a long choose element
>> like this:
>>
>> <template match="*">
>> <copy>
>> <for-each select="@*">
>> <choose>
>> <when test="not(contains(string(),'{'))">
>> <copy/>
>> </when>
>> <when test="local-name()='att1'">
>> <attribute name="att1">
>> <call-template name="modify-attribute-value-templates"/>
>> </attribute>
>> </when>
>> <when test="local-name()='att2'">
>> <attribute name="att2">
>> <call-template name="modify-attribute-value-templates"/>
>> </attribute>
>> </when>
>> <!-- a ton of more attributes -->
>> <otherwise>
>> <message terminate="yes">
>> The attribute value template found in attribute
>> <value-of select="local-name()"/>
>> isn't handled by the stylesheet.
>> </message>
>> </otherwise>
>> </choose>
>> </for-each>
>> <apply-templates/>
>> </copy>
>> </template>
>>
>> There might be an awful lot of attributes that have to be handled. If
>> I don't know what attributes are to be found in the source document,
>> then I I'll have to add another step to the process, creating the
>> above choose statement using another stylesheet.
>>
>> I refuse to believe that something I thought would be done in three
>> lines turns out to require thousands of lines for case differentiation
>> and potentially an additional step in the process. Can anyone help?
>>
>> Thomas W.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] copy attributes modifying, Emmanuel Bégué | Thread | Re: [xsl] copy attributes modifying, Michael Kay |
| Re: [xsl] copy attributes modifying, Emmanuel Bégué | Date | Re: [xsl] copy attributes modifying, Michael Kay |
| Month |