<xsl:variable name="fbids">
<xsl:sequence select="
feature_relationship[type_id/cvterm[name='molec_deletes' or name='deletes']]
/object_id/feature/feature_synonym/synonym_id/synonym/synonym_sgml"/>
</xsl:variable>
此查詢不返回匹配節點的序列作爲序列 本身,它返回它們作爲單個的孩子#documentfragment。
是的,因爲在變量主體內部有一個序列並且該變量沒有指定類型。在這種情況下的默認類型是:document-node()
。
解:
指定變量沒有身體和在select
屬性的xsl:variable
提供XPath表達式:
<xsl:variable name="fbids" select="
feature_relationship[type_id/cvterm[name='molec_deletes' or name='deletes']]
/object_id/feature/feature_synonym/synonym_id/synonym/synonym_sgml"/>
它仍然是一個很好的做法來指定想要的類型的變量使用as
屬性。
當變量的值(一系列元素)在其正文內動態創建時,完整的答案也必須涵蓋案例。
再次指定變量的類型是解決方案的關鍵。
這裏是一個小而完整的例子:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<xsl:variable name="vMapped" as="element()*">
<xsl:for-each select="num">
<num><xsl:value-of select=".*2"/></num>
</xsl:for-each>
</xsl:variable>
<xsl:for-each select="$vMapped">
<xsl:sequence select="."/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
當下面的XML文檔應用這種轉變:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
命名$vMapped
變量得到裏面的動態創建的價值及其身體。代碼的其餘部分成功使用該變量作爲一系列元素 - 訪問並複製此序列中的每個元素:
<num>2</num>
<num>4</num>
<num>6</num>
<num>8</num>
<num>10</num>
<num>12</num>
<num>14</num>
<num>16</num>
<num>18</num>
<num>20</num>
XSLT 1或2?這個區域有很大的不同。哦,而且不會簡單地用' '做這份工作嗎? –
biziclop
2012-08-10 22:03:39
XSLT 2,是的! – 2012-08-13 16:01:11