开发者

xsl to retrieve other attribute values and append values into one attribute

To start:

<test style="font:2px;color:#FFFFFF" bgcolor="#CCCCCC" TOPMARGIN="5">style</test>

Using XSLT/XPATH, I copy everything over from my document

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

But I'm not sure how to get this result using XSLT/XPATH:

<test style="background-color:#CCCCCC; margin-top:1;font:2px;color:#FFFFFF">style</test>

I think I'm failing at the XPATH. This is my attempt at just retrieving bgColor:

<xsl:template match="@bgColor">
 开发者_开发百科<xsl:attribute name="style">
   <xsl:text>background-color:</xsl:text>
   <xsl:value-of select="."/>
   <xsl:text>;</xsl:text>
   <xsl:value-of select="../@style"/>
 </xsl:attribute>
</xsl:template>

Unfortunately, even this breaks when style is placed after bgColor in the original document. How can I append these deprecated attribute values into one inline style attribute?


This transformation:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/*">
  <test style="{@style};background-color:{@bgcolor};margin-top:{@TOPMARGIN}">
   <xsl:value-of select="."/>
  </test>
 </xsl:template>
</xsl:stylesheet>

when applied on the provided XML document:

<test style="font:2px;color:#FFFFFF"
      bgcolor="#CCCCCC" TOPMARGIN="5">style</test>

produces the wanted, correct result:

<test style="font:2px;color:#FFFFFF;background-color:#CCCCCC;margin-top:5">style</test>

Explanation: Use of AVT.


May be not the best way, but it works:

<xsl:template match="test">
    <xsl:element name="{name()}">
        <xsl:apply-templates select="@*[name() != 'bgcolor']"/>   
    </xsl:element>
</xsl:template>    

<xsl:template match="@*">
    <xsl:copy/>
</xsl:template>

<xsl:template match="@style">
    <xsl:attribute name="style">
        <xsl:value-of select="."/>
        <xsl:text>;background-color:</xsl:text>
        <xsl:value-of select="../@bgcolor"/>
    </xsl:attribute>
</xsl:template>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜