2012-05-10 19 views
22

Có khả năng bao gồm nhiều điều kiện trong 'test' thuộc tính biểu hiện trong <xsl:if> thẻ của XSLT nhưLàm thế nào để thêm nhiều điều kiện thử nghiệm trong 'test' thuộc tính biểu hiện của <xsl:if> thẻ

<xsl:if test="$var='ab' | $var='bc' | $var='ca' "> 
</xsl:if> 

Iam nhận được một lỗi như "Biểu thức phải được đánh giá thành bộ nút".

Có khả năng mã hóa nhiều điều kiện như vậy trong <xsl:if> Thẻ không?

bất cứ ai có thể giải thích như thế nào chúng ta có thể đạt được điều này xác nhận tình trạng nhiều cho các thẻ sau đây trong

<xsl:if> trong thử nghiệm thuộc tính biểu hiện

<xsl:for-each> trong chọn biểu thuộc tính

<xsl:template> trong trận đấu thuộc tính biểu hiện

?

Trả lời

33
<xsl:if test="$var='ab' | $var='bc' | $var='ca' "> 

Đây là sai - bạn đang sử dụng XPath đoàn hành | trên các giá trị boolean.

Giải pháp: sử dụng toán tử XPath or:

<xsl:if test="$var='ab' or $var='bc' or $var='ca' "> 

Biểu thức XPath ở trên (giá trị của thuộc tính test) có thể được tối ưu hóa, do đó chỉ có một so sánh được thực hiện và không or là cần thiết:

<xsl:if test="contains('|ab|bc|ca|', concat('|', $var, '|'))"> 
+0

vì vậy điều này giống nhau đối với các thẻ khác ngay cho xsl: for-each và xsl: template –

+0

Cảm ơn rất nhiều.Làm thế nào để triển khai cùng điều kiện trong biểu thức của các thẻ khác. –

+1

@Jeevan: Bạn được chào đón. Hầu hết các lệnh XSLT đều có các thuộc tính, có giá trị được chỉ định như là một biểu thức XPath. Ngôn ngữ XPath có các quy tắc cú pháp của nó và trong bất kỳ biểu thức XPath nào '|' là toán tử union. –

1

trong XSLT 2.0 hoặc cao hơn, bạn có thể kiểm tra đối với một chuỗi các chuỗi:

01.
<xsl:if test="$var=('ab','bc','ca')">...</xsl:if>