是否有办法获取先前迭代的元素。在xslt 1.0中获取之前迭代的元素
我有下面的XML文档(简称为更好的概述):
<requests>
<request>
<id>514</id>
<status>accepted</status>
<updated>"2013-10-07T12:00:51.508"</updated>
<query>
<![CDATA[Select column1 from table1]]>
</query>
</request>
<request>
<id>22</id>
<status>rejected</status>
<updated>"2012-11-07T12:00:51.508"</updated>
<query>
<![CDATA[Select column3 from table2]]>
</query>
</request>
<request>
<id>7523</id>
<status>accepted</status>
<updated>"2012-01-07T02:00:52.508"</updated>
<query>
<![CDATA[Select column8 from table3]]>
</query>
</request>
<request>
<id>84</id>
<status>accepted</status>
<updated>"2000-12-07T12:00:51.1"</updated>
<query>
<![CDATA[Select column1 from table1]]>
</query>
</request>
<request>
<id>999</id>
<status>accepted</status>
<updated>"2006-12-07T12:00:51.1"</updated>
<query>
<![CDATA[Select column1 from table1]]>
</query>
</request>
.
.
.
</requests>
现在我必须选择与状态的所有节点:“接受”的表,然后由栏目组他们其中被查询并且每列只选择具有最近更新时间的两个请求。输出应该是以简单文本形式给出的这些节点的id。例如,对于查询'从表1选择列1'514和999应该被选择用于输出,而不是84。我已经阅读了muenchian方法,但我无法将其应用于解析的文本(在本例中为查询中的文本)。 这就是为什么我试图找出从以前的迭代中获取信息的方式,所以我可以按照给定的条件对节点进行排序并找到我期待的id。
例如:
<xsl:for-each select="*[local-name()='requests']/*[local-name='request'][@status='accepted']" >
<xsl:sort select="string(*[local-name()='query']/text())" order="text" data-type="number" />
<xsl:sort select="@pdated" order="descending" data-type="number" />
<xsl:value-of select="string(preceding-sibling::*[1]/*[local-name()='query']/text()) />
现在这个工作,但不是我想要的方式,它返回文档在前面的兄弟,但不是以前的迭代的查询文本。是这样的可能吗? 谢谢
输入和请求的输出的例子将是有用的。 - P.S.是否有理由使用'* [local-name()='requests']等等尴尬的表情? – 2014-10-06 18:33:12
@ michael.hor257k有些人会不惜一切代价学习使用命名空间。 – JLRishe 2014-10-07 03:45:03