0
假設下面的xml輸入。動態元素的XML轉換
<Report Name="Report2" >
<ITable i_id="Item ID" i_name="Item Name" heart_beat="Heart Beat" is_active="Is Active">
<FkItemID_Collection>
<FkItemID i_id="1">
<i_name i_name="80">
<heart_beat heart_beat="0">
<is_active is_active="True">
<Tags>
<Tag Name="ItemClass" Value="Division"/>
<Tag Name="ItemDisplayName" Value="80"/>
<Tag Name="ItemName" Value="80"/>
<Tag Name="ItemType" Value="Logical"/>
</Tags>
</is_active>
</heart_beat>
</i_name>
</FkItemID>
<FkItemID i_id="2">
//Same formatted day as above element
</FkItemID>
</FkItemID_Collection>
</ITable>
</Report>
專業有關XML是可以有很多元素,比如, 例如:
<i_name i_name="80">
<i_price i_price ="10">
<heart_beat heart_beat="0">`
同樣。
這些元素的數量可以動態改變。這些標籤通常位於<Tags>
區塊內。
至於最終的結果,我希望輸出這樣
<Report Name="Report2">
<Table i_id="Item ID" i_name="item Name" heart_beat="heart_beat" col1="ItemClass" col2="ItemDisplayName" col3="ItemName" col4="ItemType" >
<Details agent_id="1" agent_name="80" col1="Division" col2="80" col3="80" col4="Logical" />
<Details i_id="2" i_name="BC" col1="Division" col2="BC" col3="BC" col4="Logical" />
</Table>
</Report>
我寫的場景中XSLT。但我有一些問題,我無法解決。這是我迄今爲止所開發的。我被困在那些我不知道如何深入內部元素的部分,直到找到Tags塊和如何迎合上面提到的item_price等動態生成的標籤爲止。
這就是我現在所做的。
<xsl:template match="/*/*[local-name()='ITable']">
<xsl:element name="Table">
<xsl:for-each select="./*">
<xsl:for-each select="./*">
<xsl:if test="position()=1">
<xsl:attribute name="i_id">Item ID</xsl:attribute>
<xsl:attribute name="i_name">Item Name</xsl:attribute>
<xsl:attribute name="i_beat">heart_beat</xsl:attribute>
<xsl:for-each select="./*/*/*/*">
<xsl:attribute name="{concat('col', position())}">
<xsl:value-of select="@TagName"/>
</xsl:attribute>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="./*">
<xsl:element name="Details">
<xsl:attribute name="i_id">
<xsl:value-of select="@i_id"/>
</xsl:attribute>
<xsl:for-each select="./*">
<xsl:attribute name="i_name">
<xsl:value-of select="@i_name"/>
</xsl:attribute>
<xsl:for-each select="./*/*/*">
<xsl:attribute name="{concat('col', position())}">
<xsl:value-of select="@TagValue"/>
</xsl:attribute>
</xsl:for-each>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:for-each>
</xsl:element>
</xsl:template>
什麼是這個問題的最佳解決方案。
不要使用XSLT 1.0和2.0標記您的帖子。說出你正在使用的版本 - 這是這些標籤的用途。 –
對不起,XSLT 1.0 –