使用XSLT将USD转换为GPB

时间:2016-06-30 13:48:00

标签: xml xslt xpath

我需要使用XSLT将货币(USD转换为GPB)。

目前实际汇率无关紧要。 (例如,英镑为1.35美元)

以下是我的XML示例:

<prices>
    <price mutable="true" packageRate="false">

        <totalPrice currencyCode="USD" fairPricesIncluded="false" groupDiscountAmount="0.00">88.30</totalPrice>

        <dates>
            <date>                
                <dailyPrice currencyCode="USD" fairPrice="false" priceChangeDate="2014-02-26" priceType="1">44.15</dailyPrice>                
            </date>
            <date>                
                <dailyPrice currencyCode="USD" fairPrice="false" priceChangeDate="2014-02-26" priceType="1">65.70</dailyPrice>                
            </date>
        </dates>

    </price>
</prices>

这是我编写的xslt以获取我需要的值:

<table>
    <xsl:for-each select="prices/price/dates/date">
        <tr>
            <td>
                <xsl:value-of select="dailyPrice/@currencyCode"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="dailyPrice"/>
            </td>
        </tr>
    </xsl:for-each>
</table>

<table>
    <xsl:for-each select="prices/price">
        <tr>
            <td>
                <xsl:value-of select="totalPrice/@currencyCode"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="totalPrice"/>
            </td>
        </tr>
    </xsl:for-each>
</table>

那么通过xslt转换xml以获取GBP而不是USD以及根据汇率(1.35)获取totalPrice和dailyPrice元素的新值的正确方法是什么?

预期输出为:

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试类似:

XSLT 1.0

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:param name="currency" select="'GBP'"/>
<xsl:param name="rate" select="1.35"/>

<xsl:template match="/prices">
    <table border="1">
        <tr>
            <th>Prices</th>
        </tr>
        <xsl:for-each select="price/dates/date">
            <tr>
                <td>
                    <xsl:value-of select="$currency"/>
                    <xsl:text> </xsl:text>
                    <xsl:value-of select="format-number(dailyPrice * $rate, '0.00')"/>
                </td>
            </tr>
        </xsl:for-each> 
        <tr>
            <th>Total</th>
        </tr>
        <tr>
            <td>
                <xsl:value-of select="$currency"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="format-number(price/totalPrice * $rate, '0.00')"/>
            </td>
        </tr>
    </table>
</xsl:template>

</xsl:stylesheet>

应用于您的输入示例,将返回:

<table border="1">
   <tr>
      <th>Prices</th>
   </tr>
   <tr>
      <td>GBP 59.60</td>
   </tr>
   <tr>
      <td>GBP 88.70</td>
   </tr>
   <tr>
      <th>Total</th>
   </tr>
   <tr>
      <td>GBP 119.20</td>
   </tr>
</table>

渲染:

enter image description here