2014-10-22 98 views
0

我試圖改變現有的測試,如果節點包含某個字符串。現在它的工作對一個字符串,它看起來像:XSL包含多個字符串

<xsl:key name="TEST" match="Parrent[contains(./Name,'Aurora') and contains(./Status,'Ongoing')]" use="Final"/> 

而這後者用於在節點改造的最終值,其中名稱=極光和狀態=正在進行。

Status 
Ongoing 
Stoped 
Started 
Ready 
NotReady 
. 
. 
. 

所以基本上我想只有更多的狀態類型做和以前一樣:現在在做相同的,但多個值,我從15行另一個.xml文件,它看起來像這樣得到即時通訊有興趣比持續進行。什麼是實施這種轉換的最佳方式?先謝謝你。

+0

** 1。**請指明XSLT 1.0或2.0。 - ** 2。**多值列表的確切格式以及您收到的方法不清楚。 – 2014-10-22 15:19:41

+0

對不起,我應該提到,這應該在xslT 1.0 – user2842773 2014-10-29 13:55:02

+0

好。現在,當你準備好回答第二個問題時... – 2014-10-29 14:14:26

回答

0

那麼你真的需要contains支票,或者你能比較平等嗎?在後一種情況下,您可以使用節點集或節點或值序列的=算子,例如與XSLT 2.0

Status = ('Ongoing', 'Stopped', 'Started', 'Ready', 'NotReady') 

分別如果您在另一個文檔中的值與結構例如。

<status-list> 
    <status>Ongoing</status> 
    <status>Stopped</status> 
    <status>Started</status> 
    ... 
</status-list> 

,那麼你可以比較

Status = document('status-list-data.xml')/status-list/status 
0

你不能在<key>的匹配屬性,使用變量,但你可以過濾關鍵的一個謂詞的結果。例如,下面的表達式:

key('keyname', something)[Status=exsl:node-set($status-list)/status] 

將選擇有一個孩子的狀態,其值列在一個變量定義爲唯一的節點:

<xsl:variable name="status-list"> 
    <status>Ongoing</status> 
    <status>Stopped</status> 
    <status>Started</status> 
    <status>Ready</status> 
    <status>NotReady</status> 
</xsl:variable> 

請注意,您需要聲明綁定到命名空間前綴exsl - 請參閱: http://www.exslt.org/exsl/index.html