这是示例Xml,我想检查是否有任何RangeItem具有输入' Else' (只有一个其他的RangeItem)然后我想把RangeItem的输出值放到Default的值,这是一个级别。
<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>
&#13;
预期产出:
<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>
&#13;
请帮帮我。
答案 0 :(得分: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>