2016-04-20 14 views
0

これはサンプルのXmlです。入力が「Else」(それ以外は1つのRangeItemが存在する)かどうかを確認したい場合は、そのRangeItemを配置しますDefault値に値を出力します。これは1レベル上にあります。 XSLT:以前のレベルのノードを更新する方法

<ColorConverter> 
 
      <Property ID="Default">#76D5F9</Property> 
 
      <RangeItem> 
 
       <Property ID="Name">RangeItem1</Property> 
 
       <Property ID="Input">Else</Property> 
 
       <Property ID="Output">#4A3737</Property> 
 
      </RangeItem> 
 
      <RangeItem> 
 
       <Property ID="Name">RangeItem2</Property> 
 
       <Property ID="Input">Equal</Property> 
 
       <Property ID="Output">#FFFFFF</Property> 
 
      </RangeItem> 
 
</ColorConverter>

予想される出力:

<ColorConverter> 
 
      <Property ID="Default">#4A3737</Property> 
 
      <RangeItem> 
 
       <Property ID="Name">RangeItem1</Property> 
 
       <Property ID="Input">Else</Property> 
 
       <Property ID="Output">#4A3737</Property> 
 
      </RangeItem> 
 
      <RangeItem> 
 
       <Property ID="Name">RangeItem2</Property> 
 
       <Property ID="Input">Equal</Property> 
 
       <Property ID="Output">#FFFFFF</Property> 
 
      </RangeItem> 
 
</ColorConverter>

私を助けてください。

答えて

1

私が正しく理解していれば、あなたがしたい:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="ColorConverter"> 
    <xsl:variable name="default-item" select="RangeItem[Property[@ID='Input']='Else']" /> 
    <xsl:copy> 
     <Property ID="Default"> 
      <xsl:choose> 
       <xsl:when test="$default-item"> 
        <xsl:value-of select="$default-item/Property[@ID='Output']"/> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:value-of select="Property[@ID='Default']"/> 
       </xsl:otherwise> 
      </xsl:choose> 
     </Property> 
     <xsl:apply-templates select="RangeItem"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
+0

はい、その作業罰金どうもありがとうございました。 –

関連する問題