2012-02-01 34 views
5
<xsl:variable name="a">20</xsl:variable> 
    <xsl:variable name="b">10</xsl:variable> 

     <xsl:if test="($a) > ($b)"> 
     ------ 
    </xsl:if> 

tôi nhận được lỗi trong nếu condion ..Cách kiểm tra biến nào lớn hơn trong xsl?

+0

Hình phạt đối với tôi. Cả libxslt lẫn Transformiix đều không hiển thị lỗi. – Saxoier

+0

@user_nums hữu ích –

Trả lời

5

Hãy thử như sau:

<xsl:if test="$a &gt; $b"> 

Hãy thử sử dụng các đối tượng ký tự cho > (& gt;) và < (& lt;) khai thác trong biểu thức, nếu không một số trình phân tích cú pháp cho rằng bạn sắp đóng thẻ hoặc mở thẻ khác.

+0

Bạn không phải thoát khỏi '>'. Hoàn toàn có thể sử dụng '$ a> $ b'. – Saxoier

+0

Bạn nói đúng, trình phân tích cú pháp XSLT mà tôi đã sử dụng nhiều mặt trăng trước đây đã giúp tôi thực hành thoát chúng để tránh các lỗi phân tích cú pháp. Chỉ cần kiểm tra ngay bây giờ và mã của bạn hoạt động tốt. Tôi học một cái gì đó mới mỗi ngày, cảm ơn! –

5

Ví dụ bạn đã đăng sẽ hoạt động. Tuy nhiên, bạn không nên rằng trong trường hợp của bạn cả hai biến là loại chuỗi mà có thể cho kết quả đáng ngạc nhiên, nơi chiều dài của họ khác nhau. Hành vi của toán tử so sánh trên các kiểu dữ liệu khác nhau được xác định trong xpath spec on booleans.

Để tránh điều này bạn có thể khai báo các biến sử dụng thuộc tính select hay thủ công chuyển đổi chúng sang number cho việc so sánh:

<xsl:variable name="a" select="20"/> 
<xsl:variable name="b" select="10"/> 
... 
<xsl:if test="number($a) > number($b)"> 
</xsl:if> 
+1

"Khi không đối tượng được so sánh là bộ nút và toán tử là <=, <, > = hoặc>, thì đối tượng được so sánh bằng cách chuyển đổi cả hai đối tượng thành số và so sánh các số theo IEEE 754." - Không có hành vi không xác định. – Saxoier

+0

@Saxoier: Bạn nói đúng, đoạn trước báo giá của bạn chỉ áp dụng cho các toán tử '=' và '! ='. –

Các vấn đề liên quan