是否有辦法獲取先前迭代的元素。在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