2015-11-12 104 views
0

是否可以在XSLT 2.0中聲明一個字符串數組?XSLT 2.0:聲明字符串數組

我想如下聲明的內容:

<xsl:variable name="countries" select="('IT','EN','SP')" /> 

,但不起作用。

謝謝。

+1

「但不起作用」是什麼意思?另外,它是一個序列;不是一個數組。 –

+0

[在xslt中創建數組]可能重複(http://stackoverflow.com/questions/3299938/creating-arrays-in-xslt) –

+0

如何創建一個字符串數組?這個帖子是不重複的... – Diaboliko

回答

1

XSLT/XPath 2.0使用的數據模型中沒有數組。您的代碼<xsl:variable name="countries" select="('IT','EN','SP')" />將一系列字符串值綁定到名爲countries的變量,您應該可以使用位置謂詞來訪問單個項目,例如, $countries[2]

如果您認爲需要陣列,則需要使用XPath 3.1,您可以在其中使用<xsl:variable name="countries" select="['IT', 'EN', 'SP']"/>,請參閱http://www.w3.org/TR/xpath-31/#id-arrays。我不知道任何發佈的XSLT處理器支持這個,但是,我認爲像BaseX這樣的XQuery實現已經升級來支持這個。

只要你只是想在平面數據類型中存儲三個或更多的原子值,我不明白爲什麼你需要新的數組功能,那麼順序('IT','EN','SP')就足夠了。數組可以是嵌套的,序列不是,因爲(1, (2, 3), 4)的結果是一個平坦的序列(1, 2, 3, 4),所以如果您需要嵌套數據結構(使用數字或字符串等原始值),您可能需要一個數組,並且必須等待,直到支持XPath 3.1,但您始終可以在當前版本的XSLT中爲嵌套數據創建XML樹結構。

+0

我解決了: Diaboliko

+0

我現在的問題是:用XSLT 1.0怎麼做? – Diaboliko

+1

我不明白你用'tokenize($ countries,',')'解決了什麼問題。至於XSLT 1.0,它的數據類型是像字符串,布爾值和數字這樣的原始值,以及像節點集和結果樹片段這樣的「複雜」值。該數據模型中沒有任何字符串序列,也沒有任何類型的數組。如果要存儲三個字符串值,則最接近的是包含三個元素的節點集,每個元素包含一個字符串。如果你想要在輸入文檔中沒有選擇的值,那麼你需要創建一個結果樹片段並將它轉換爲一個用'exsl:node-set'設置的節點。 –