2014-10-22 59 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