如果节点包含某个字符串,我试图改变现有的测试。现在它可以对一个字符串起作用,它看起来像:
<xsl:key name="TEST" match="Parrent[contains(./Name,'Aurora') and contains(./Status,'Ongoing')]" use="Final"/>
以后用于转换Name = Aurora和Status = Ongoing的节点中的Final值。现在我有兴趣做同样的事情,但是对于我从15行中的另一个.xml文件获得的多个值看起来像这样:
Status
Ongoing
Stoped
Started
Ready
NotReady
.
.
.
所以基本上我想和以前一样只做更多的Status类型而不是Ongoing。实现这种转变的最佳方法是什么?提前谢谢。
答案 0 :(得分: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
答案 1 :(得分:0)
您不能在<key>
的匹配属性中使用变量,但可以通过谓词过滤键的结果。例如,以下表达式:
key('keyname', something)[Status=exsl:node-set($status-list)/status]
将仅选择具有子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