2010-01-28 1 views
6

Tôi có kịch bản sau đây. Tôi có một danh sách các nước (EG, KSA, UAE, AG)Tạo danh sách/mảng trong XSLT

Tôi cần phải kiểm tra đầu vào XML nếu nó được chứa trong danh sách này hay không:

<xsl:variable name="$country" select="Request/country" > 

<!-- now I need to declare the list of countries here --> 

<xsl:choose> 
<!-- need to check if this list contains the country --> 
<xsl:when test="$country='??????'"> 
    <xsl:text>IN</xsl:text> 
</xsl:when> 
<xsl:otherwise> 
    <xsl:text>OUT</xsl:text> 
</xsl:otherwise> 
</xsl:choose> 

Lưu ý: Tôi đang sử dụng XSLT 1.0 .

+0

danh sách đó thuộc về đầu vào XML của bạn? –

+0

XML đầu vào như thế nào? Các nút văn bản mã quốc gia có phải là trẻ em hay yếu tố hoặc ví dụ: thuộc tính? – jelovirt

Trả lời

1

Hãy thử một cái gì đó như thế nào, nếu danh sách quốc gia của bạn thuộc vào đầu vào XML của bạn:

<xsl:when test="/yourlist[country = $country]'"> 

Hoặc, nếu đó là tĩnh, bạn có thể đi với:

<xsl:when test="$country = 'EG' or $country = 'KSA' or ..."> 
+1

'' là thừa - nó tương đương với '' . :-) – Tomalak

+0

mẹo nhỏ Tomalak, ty –

4

EDIT

Khi đọc bài viết của bạn một lần nữa, tôi nghĩ rằng phiên bản gốc của câu trả lời của tôi (dưới đây) phải không.

Bạn một danh sách đã - Tờ khai biến của bạn lựa chọn một nút thiết lập của tất cả các <country> nút đó là con của <Request> (một node-set là XSLT tương đương với một mảng/danh sách):

<xsl:variable name="$country" select="Request/country" > 

Nhưng vấn đề là, bạn thậm chí không cần danh sách đó dưới dạng biến riêng biệt; tất cả các bạn cần là:

<xsl:when test="Request[country=$country]"><!-- … --></xsl:when> 

đâu Request[country=$country] đọc như "Trong vòng <Request>, nhìn vào mỗi <country> và chọn nó nếu nó là bằng $country." Khi biểu thức trả về một tập hợp nút không trống, $country nằm trong danh sách.

Thực tế, những gì Rubens Farias đã nói từ đầu. :)


Câu trả lời gốc, lưu giữ hồ sơ.

Nếu bởi "danh sách" bạn có nghĩa là một chuỗi bằng dấu phẩy của thẻ:

<!-- instead of a variable, this could be a param or dynamically calculated --> 
<xsl:variable name="countries" select="'EG, KSA, UAE, AG'" /> 
<xsl:variable name="country" select="'KSA'" /> 

<xsl:choose> 
    <!-- concat the separator to start and end to ensure unambiguous matching --> 
    <xsl:when test=" 
    contains(
     concat(', ', normalize-space($countries), ', ') 
     concat(', ', $country, ', ') 
    ) 
    "> 
    <xsl:text>IN</xsl:text> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:text>OUT</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 

2
<xsl:variable name="$country" select="Request/country"/> 
<xsl:variable name="countries">|EG|KSA|UAE|AG|</xsl:variable> 

<xsl:when test="contains($countries,$country)">...</xsl:when>