2009-10-16 7 views
0

Je transforme xml en wordml en utilisant xslt. J'aimerais pouvoir formater différemment le contenu d'une cellule de tableau si l'attribut de l'élément qui contient le contenu de cette cellule est différent. Par exemple, je suit xslt:style basé sur l'attribut d'élément?

<xsl:template match="/ns0:RootElement/ns0:Items/ns0:Item0"> 
    <w:tc> 
     <w:tcPr> 
     <w:tcW w:w="2268" w:type="dxa" /> 
     <w:noWrap /> 
     </w:tcPr> 
     <ns0:Item0> 
     <xsl:for-each select="@ns0:*|@*[namespace-uri()='']"> 
      <xsl:attribute name="{name()}" namespace="{namespace-uri()}"> 
      <xsl:value-of select="." /> 
      </xsl:attribute> 
     </xsl:for-each> 
     <w:p wsp:rsidR="00F75372" wsp:rsidRPr="0058287E" wsp:rsidRDefault="00F75372" wsp:rsidP="0058287E"> 
      <w:r wsp:rsidRPr="0058287E"> <w:t><xsl:value-of select="." /></w:t></w:r> 
     </w:p> 
     </ns0:Item0> 
    </w:tc> 
    </xsl:template> 

Disons que item0 a attribut sélectionné, je voudrais changer formating en fonction de cet attribut. Une idée sur la façon de modifier xslt présenté pour y parvenir? Cordialement

Répondre

0

Voici une solution qui a fonctionné pour moi:

<xsl:template match="/ns0:RootElement/ns0:Items/ns0:Item0"> 
    <w:tc> 
     <w:tcPr> 
     <w:tcW w:w="2268" w:type="dxa" /> 
     <w:noWrap /> 
      <!-- test if item0 attribute is selected and if it is, change border and background color--> 
     <xsl:if test='@selected=1'> 
      <w:tcBorders> 
       <w:top w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="993300" /> 
       <w:left w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="993300" /> 
       <w:bottom w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="993300" /> 
       <w:right w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="993300" /> 
      </w:tcBorders> 
      <w:shd w:val="clear" w:color="auto" w:fill="FF9900" wx:bgcolor="DD5800" /> 
     </xsl:if> 
     </w:tcPr> 
     <ns0:Item0> 
     <xsl:for-each select="@ns0:*|@*[namespace-uri()='']"> 
      <xsl:attribute name="{name()}" namespace="{namespace-uri()}"> 
      <xsl:value-of select="." /> 
      </xsl:attribute> 
     </xsl:for-each> 
     <w:p wsp:rsidR="00F75372" wsp:rsidRPr="0058287E" wsp:rsidRDefault="00F75372" wsp:rsidP="0058287E"> 
      <!-- test if item0 attribute is selected and if it is, change font to bold--> 
      <xsl:if test='@selected=1'> 
       <w:r> 
       <w:rPr> 
        <!--<w:i w:val="on"/>--> 
        <w:b/> 
       </w:rPr> 
       <w:t> 
        <xsl:value-of select="." /> 
       </w:t> 
       </w:r> 
      </xsl:if> 
      <xsl:if test='@selected=-1'> 
       <w:r wsp:rsidRPr="0058287E"> 
       <w:t> 
        <xsl:value-of select="." /> 
       </w:t> 
       </w:r> 
      </xsl:if> 
     </w:p> 
     </ns0:Item0> 
    </w:tc> 
    </xsl:template> 

quelqu'un Hope pourrait avoir l'utilisation de ce ...

1

Je pense que vous voulez xsl: choose

http://www.w3schools.com/XSL/xsl_choose.asp

Il est une instruction if pour xsl.

+0

Je pense que je peux utiliser xsl: si aussi depuis que je suis en utilisant seulement deux valeurs , mais le problème est de savoir comment modifier xslt pour inclure cette déclaration si/choose – krul

Questions connexes