获取第一次出现的属性的前一个兄弟值

时间:2013-08-28 14:04:24

标签: xslt-1.0

<Assignment workingHours="2.5" effFrom="2016-06-07" />
<Assignment workingHours="2.5" effFrom="2018-11-07" />
<Assignment workingHours="1.8" effFrom="2009-05-01" />
<Assignment workingHours="3.7" effFrom="2002-06-12" />
<Assignment workingHours="2.5" effFrom="2003-08-07" />
<Assignment workingHours="3.7" effFrom="2007-03-011" />

我是XSLT的新手。我使用的是XSLT 1.0,需要解析上面的输入XML并找到属性@workingHours = 3.7的第一次出现,然后得到前面属性@effFrom的值。

所以从上面的例子中,我需要使用XSLT 1.0获得值@effFrom = 2009-05-01

我有一个新要求: 我需要解析上面的示例xml并找到第一次出现的EITHER属性@workingHours = 3.7 OR属性@workingHours = 1.8,取决于xml中的第一个,然后得到前面属性@effFrom的值。

所以从上面的例子中,我需要得到值@effFrom = 2018-11-07

1 个答案:

答案 0 :(得分:0)

尝试关注xpath

//Assignment[@workingHours = '3.7'][1]/preceding-sibling::Assignment[1]/@effFrom

使用情况取决于您的需要,但您可以此

<xsl:value-of select="//Assignment[@workingHours = '3.7'][1]/preceding-sibling::Assignment[1]/@effFrom" />

编辑:对于以后的请求,xpath的一小部分更改应该起作用

//Assignment[@workingHours = '3.7' or @workingHours = '1.8'][1]/preceding-sibling::Assignment[1]/@effFrom  

即://Assignment[@workingHours = '3.7' or @workingHours = '1.8']将选择@workingHours = 3.7或1.8的所有Assignment元素。第二个谓词[1]将从这些Assignment元素中选择第一个谓词。