Trong bảng tính XSLT của tôi, tôi cần xác định biến xsl: với một giá trị hoặc biến khác tùy thuộc vào giá trị của nút xml. Mã dưới đây chỉ ra những gì tôi đang cố gắng làm. Tôi muốn xác định nhiều biến theo cách này.Xác định các biến XSLT động bằng cách sử dụng xsl: select
Vấn đề chính là để chọn giá trị biến dựa trên giá trị nút của từng mục, việc chọn phải được thực hiện trong xsl: foreach và bất cứ khi nào tôi cố gắng xác định biến trong xsl: foreach, nó hiển thị lỗi.
<xsl:for-each select="WORKS/item">
<xsl:variable name="rate1">
<xsl:choose>
<xsl:when test="rental='new'">
<xsl:value-of select="'.15'" />
</xsl:when>
<xsl:when test="rental='used'">
<xsl:value-of select="'.30'" />
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:variable name="rent1" select="{$rate1}">
Lý do tôi muốn thực hiện điều này thông qua việc thay đổi giá trị biến là bởi vì các biến này sau đó được sử dụng trong một hàm toán học, làm tăng gấp bội biến bằng một giá trị nút (giá) mà sẽ khác nhau với mỗi . Đây là cách các biến, một khi được định nghĩa, sẽ được sử dụng. Cảm ơn bạn rất nhiều.
<div class="rental-period">1-4 Days:</div>
<div class="rental-price"><em>$ <xsl:value-of select='format-number((100*(price * $rent1) div 100), "###.00")'/></em></div>
<div class="rental-period">5-7 Days:</div>
<div class="rental-price"><em>$ <xsl:value-of select='format-number((100*(price * $rent2) div 100), "###.00")'/></em></div>
<div class="rental-period">8-14 Days:</div>
<div class="rental-price"><em>$ <xsl:value-of select='format-number((100*(price * $rent3) div 100), "###.00")'/></em></div>
UPDATE: Ok. Tôi đã thử các giải pháp được cung cấp dưới đây bởi Dark Falcon, nhưng nó giữ cho tôi một lỗi "mở và kết thúc thẻ không phù hợp". Lỗi tương tự như trước. Nó không có vẻ như có xsl: chọn nơi tôi có nó, vì những con số dòng là nơi mà các lỗi đến từ. Dưới đây là tất cả các mã stylesheet liên quan:
<xsl:template name="showPrice">
<xsl:param name="rentalRate"/>
<div class="rental-price"><em>$ <xsl:value-of select='format-number((100*(price * $rentalRate) div 100), "###.00")'/></em></div>
</xsl:template>
<xsl:template match="/">
<xsl:for-each select="WORKS/item">
<div class="rental-info">
<xsl:choose>
<xsl:when test="rental='new'">
<xsl:call-template name="showPrice">
<xsl:with-param name="rentalRate" select="'.15'">
</xsl:call-template>
</xsl:when>
<xsl:when test="rental='used'">
<xsl:call-template name="showPrice">
<xsl:with-param name="rentalRate" select="'.30'">
</xsl:call-template>
</xsl:when>
</xsl:choose>
</div>
</xsl:for-each>
</xsl:template>
tôi đã cố gắng sử dụng các cuộc gọi mẫu chức năng như đề nghị, nhưng tôi nhận được các lỗi tương tự. Tôi đã cập nhật câu hỏi của mình ở trên. Cảm ơn! – Alan
Rất tiếc, với-param cần phải là một thẻ trống. Ngay bây giờ nó không có thẻ đóng. –