2010-06-15 44 views
0

我現在有一個棘手的XSL問題。 我需要複製現有的XML,複製某個元素(及其子元素)並修改兩個子元素的值。 這些修改是:將'value'元素的值除以110,並將'type'元素的值從'normal'編輯爲'discount'。複製現有的XML,複製元素並修改

這是目前我有:

當前XML:

<dataset> 
    <data> 
    <prices> 
    <price> 
     <value>50.00</value> 
     <type>normal</type> 
    </price> 
    </prices> 
</data> 
</dataset> 

預期結果

<dataset> 
    <data> 
    <prices> 
    <price> 
     <value>50.00</value> 
     <type>normal</type> 
    </price> 
    <price> 
     <value>45.00</value> 
     <type>discount</type> 
    </price> 
    </prices> 
</data> 
</dataset> 

贊成嗎? 我已經得到儘可能複製所需的'價格'元素使用副本,但我堅持以下如何修改它。

回答

1

您的規格有點偏離 - 您的價值是乘以0.9而不是110的結果。下面假定您想要以「普通」價格編輯所有內容 - 將模板匹配模式更改爲您的特定節點或一組節點。

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml"/> 

    <xsl:template match="/dataset/data/prices/price[type='normal']"> 
    <xsl:apply-templates/> 
    <xsl:copy> 
     <value><xsl:value-of select="format-number(value * 0.9, '0.00')"/></value> 
     <type>discount</type> 
    </xsl:copy> 
    </xsl:template> 

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

</xsl:stylesheet> 
0

假設你有一個匹配價格的模板,你只需要添加你所談論的邏輯:

<xsl:template match="price"> 
    <!-- xsl:copy or xsl:copy-of depending on how you did it --> 
    <xsl:copy> 
    <xsl:apply-templates/> 
    </xsl:copy> 
    <price> 
    <value> 
     <xsl:value-of select="value * 0.9"/> 
    </value> 
    <type>discount</type> 
    </price> 
</xsl:template> 

我猜你的操作實際上是「由0.9乘」而不是「鴻溝乘以110「,因爲45不等於50除以110(也不等於50除以1.10)。