Я хотел бы знать, возможно ли вкладывать динамические наборы узлов в XSLT и, если да, как выбирать их с помощью xPath. Это часть большой задачи. Я показываю только ту часть, на которой я застрял.
Это мой 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
Вот что я хотел бы получить:
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