2011-03-01 43 views
0

我试图从一个XML变换到另一个XSLT翻译

输入

<Surcharge> 
    <CommercialVehicle desc="Commercial Vehicle">395.00</CommercialVehicle> 
    <EnhancedElectrical desc="Enhanced Electrical">395.00</EnhancedElectrical> 
    <AirConditioningHeating desc="Air Conditioning/Heating">395.00</AirConditioningHeating> 
</Surcharge> 

期望的输出

<Options> 
<Option> 
    <OptionId>0</OptionId> 
    <OptionDesc>Commercial Vehicle</OptionDesc> 
    <OptionName>Commercial Vehicle</OptionName> 
    <RetailRate>395.00</RetailRate> 
    <NetRate>395.00</NetRate> 
    <IsSurcharge>false</IsSurcharge> 
    </Option> 
<Option> 
    <OptionId>0</OptionId> 
    <OptionDesc>Enhanced Electrical</OptionDesc> 
    <OptionName>Enhanced Electrical</OptionName> 
    <RetailRate>395.00</RetailRate> 
    <NetRate>395.00</NetRate> 
    <IsSurcharge>false</IsSurcharge> 
    </Option> 
.... 
</Options> 

我使用以下XSL

<Options> 
    <xsl:for-each select="//Rate[(CvCvty = $vProg) and (MonthTerm=$vMonthTerm) and (MileageTerm=$vMileageTerm) and (Deductible=$vDeductible)]/Surcharge"> 
    <xsl:choose> 
     <xsl:when test="string-length(.//@desc)>0"> 
     <Option> 
      <OptionId>0</OptionId> 
      <OptionDesc> 
      <xsl:value-of select=".//@desc"/> 
      </OptionDesc> 
      <OptionName> 
      <xsl:value-of select=".//@desc"/> 
      </OptionName> 
      <RetailRate> 
      <xsl:value-of select="."/> 
      </RetailRate> 
      <NetRate> 
      <xsl:value-of select="."/> 
      </NetRate> 
      <IsSurcharge>false</IsSurcharge> 
     </Option> 
     </xsl:when> 
    </xsl:choose> 
    </xsl:for-each> 
</Options> 

但不知何故,我得到这个输出,可以有人帮我找出什么要改变

<Options> 
<Option> 
    <OptionId>0</OptionId> 
    <OptionDesc>Commercial Vehicle</OptionDesc> 
    <OptionName>Commercial Vehicle</OptionName> 
    <RetailRate>395.00395.00395.00</RetailRate> 
    <NetRate>395.00395.00395.00</NetRate> 
    <IsSurcharge>false</IsSurcharge> 
    </Option> 
</Options> 

感谢

回答

1

你的foreach只选择单一的收费元素,您需要将其更改为通过在最后放置/ *来选择子节点。

这会将上下文放在您感兴趣的元素上,因此您应该使用@desc而不是.//@desc语法。

+0

谢谢邓肯。有效。 – 2011-03-01 21:46:59

+1

如果您单击此问题旁边的刻度图标,它会将其标记为答案,非常感谢:) – 2011-03-01 21:55:10