我需要將名稱值對轉換爲XML。我能夠生成一個XML,但元素名稱應該分組,並且不應該重複。請看下面。 FieldValue元素在Detail節點中包含2個OrderItem值。如果帶有OrderItem的FieldValue重複,那麼結果應該分組到一個OrderItem節點中。請幫忙。XSLT:轉換名稱/值對並轉換XML
源XML:
<SC>
\t <Header>
\t \t <Record>
\t \t \t <FieldName>Schema</FieldName>
\t \t \t <FieldValue>OrderHeader</FieldValue>
\t \t </Record>
\t \t <Record>
\t \t \t <FieldName>Order</FieldName>
\t \t \t <FieldValue>1234</FieldValue>
\t \t </Record>
\t </Header>
\t <Detail>
\t \t <Record>
\t \t \t <FieldName>Schema</FieldName>
\t \t \t <FieldValue>OrderItem</FieldValue>
\t \t </Record>
\t \t <Record>
\t \t \t <FieldName>Item</FieldName>
\t \t \t <FieldValue>1</FieldValue>
\t \t </Record>
\t \t <Record>
\t \t \t <FieldName>Qty</FieldName>
\t \t \t <FieldValue>10</FieldValue>
\t \t </Record>
\t </Detail>
\t <Detail>
\t \t <Record>
\t \t \t <FieldName>Schema</FieldName>
\t \t \t <FieldValue>OrderItem</FieldValue>
\t \t </Record>
\t \t <Record>
\t \t \t <FieldName>Item</FieldName>
\t \t \t <FieldValue>2</FieldValue>
\t \t </Record>
\t \t <Record>
\t \t \t <FieldName>Qty</FieldName>
\t \t \t <FieldValue>20</FieldValue>
\t \t </Record>
\t </Detail>
</SC>
目標XML:
<Order>
<OrderItem>
<Item>
<Item>1</Item>
<Qty>10</Qty>
</Item>
<Item>
<Item>2</Item>
<Qty>20</Qty>
</Item>
</OrderItem>
</Order>
XSLT:
<xsl:template match="@*|node()">
<Order>
<xsl:for-each select="Detail">
<Item>
<xsl:apply-templates select="Record[position()>1]"/>
</Item>
</xsl:for-each>
</Order>
</xsl:template>
<xsl:template match="Record">
<xsl:element name="{FieldName}">
<xsl:value-of select="FieldValue"/>
</xsl:element>
</xsl:template>
您好,感謝您的投入。 OrderItem元素應該從名稱值對動態創建。元素/節點不是靜態的。它是動態的。 – user8696326
該要求在您的問題中提供的代碼中不明確。如果您可以更新您的問題(即更新您期望的目標XML的外觀),那麼我可以爲您更新我的答案。 – jhenderson2099