我想知道是否有可能在XSLT中嵌套動態節點集,如果是這樣,如何使用xPath選擇它們。這是一個更大任務的一部分。我只是展示了我堅持的部分。是否可以在xslt中嵌套動態節點集?
這是我的XSLT:
<xsl:variable name="Tables">
<xsl:for-each select="Table">
<xsl:variable name="TableName" select="Name | @Name"/>
<xsl:variable name="Columns">
<xsl:for-each select="Column">
<xsl:variable name="ColumnName" select="Name | @Name"/>
<xsl:variable name="Type" select="Type | @Type"/>
<Column>
<Name>
<xsl:value-of select="$ColumnName"/>
</Name>
<Type>
<xsl:value-of select="$Type"/>
</Type>
</Column>
</xsl:for-each>
</xsl:variable>
<Table>
<Name>
<xsl:value-of select="$TableName"/>
</Name>
<Columns>
<xsl:value-of select="$Columns"/>
</Columns>
</Table>
</xsl:for-each>
</xsl:variable>
<xsl:for-each select="msxsl:node-set($Tables)/Table">
Table Name: <xsl:value-of select="Name"/>
<xsl:for-each select="msxsl:node-set(Columns)/Column" xml:space="preserve">
Column Name: <xsl:value-of select="Name"/>
Column Type: <xsl:value-of select="Type"/>
</xsl:for-each>
</xsl:for-each>
這是我的XML:
<Table Name="Product">
<Column Name="ProductID" Type="int"/>
<Column Name="Name" Type="string"/>
<Column Name="Cost" Type="decimal"/>
<Column Name="Area" Type="decimal?"/>
</Table>
<Table Name="Market">
<Column Name="MarketID" Type="int"/>
<Column Name="Name" Type="string"/>
<Column Name="MinimumASP" Type="double"/>
<Column Name="MaximumASP" Type="double"/>
</Table>
這是目前輸出我得到:
Table Name: Product
Table Name: Market
這是我d喜歡得到:
Table Name: Product
Column Name: ProductID
Column Type: int
Column Name: Name
Column Type: string
Column Name: Cost
Column Type: decimal
Column Name: Area
Column Type: decimal?
Table Name: Market
Column Name: MarketID
Column Type: int
Column Name: Name
Column Type: string
Column Name: MinimumASP
Column Type: double
Column Name: MaximumASP
Column Type: double
@ user708613:有兩個錯誤:您應該使用' '而不是' '; '$ Columns'超出了那些最外層的'xsl:for-each'指令的範圍。你應該使用'msxsl:node-set($ Table)/ Table/Columns/Column'。 –
2011-04-14 19:27:10
我只需要改變值的複製和它的作品!非常感謝! – spide 2011-04-14 19:30:38
好問題,+1。看到我的答案是一個完整的,簡短而且簡單的解決方案,它不會創建任何臨時樹,並且完全不需要'xxx:node-set()'函數。 – 2011-04-15 03:10:44