1
我想將XML轉換爲特定的輸出XML。但是我不能根據N的變化對一組領域進行分組。通過節點名稱xml組元素由後綴更改
<Balances>
<Balances_Line_Item0>
<Page>
<Field>EmpID</Field>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</Page>
</Balances_Line_Item0>
<Balances_Line_Item0>
<Page>
<Field>Name</Field>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
</Page>
</Balances_Line_Item0>
<Balances_Line_Item0>
<Page>
<Field>Department</Field>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</Page>
</Balances_Line_Item0>
<Balances_Line_Item1>
<Page>
<Field>EmpID</Field>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</Page>
</Balances_Line_Item1>
<Balances_Line_Item1>
<Page>
<Field>Name</Field>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
</Page>
</Balances_Line_Item1>
<Balances_Line_Item1>
<Page>
<Field>Department</Field>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</Page>
</Balances_Line_Item1>
<Balances_Line_Item2>
<Page>
<Field>EmpID</Field>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</Page>
</Balances_Line_Item2>
<Balances_Line_Item2>
<Page>
<Field>Name</Field>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
</Page>
</Balances_Line_Item2>
<Balances_Line_Item2>
<Page>
<Field>Department</Field>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</Page>
</Balances_Line_Item2>
</Balances>
我轉換XML應該是:
<Balances>
<Balances_Line_Item0>
<EmpID>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</EmpID>
<Name>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
</Name>
<Dept>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</Dept>
</Balances_Line_Item0>
<Balances_Line_Item1>
<EmpID>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</EmpID>
<Name>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
</Name>
<Dept>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</Dept>
</Balances_Line_Item1>
<Balances_Line_Item2>
<EmpID>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</EmpID>
<Name>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
<Letter>53</Letter>
<Letter>56</Letter>
<Letter>76</Letter>
</Name>
<Dept>
<Letter>45</Letter>
<Letter>45</Letter>
<Letter>45</Letter>
</Dept>
</Balances_Line_Item2>
</Balances>
如何輸入XML轉化爲上面的XML?請建議。
我申請上生成的XML多了一個轉變:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:copy>
<xsl:element name="Balances">
<xsl:for-each select="Balances/node()[position() mod 5 = 1]">
<xsl:element name="LineItem">
<xsl:for-each select=". | following-sibling::node()[not(position() > 4)]">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
但我的XSLT是非常基本的,我不能繼續使用該XSL用於更復雜的轉換。有人建議調整和更好的xslt,可能是一個XSLT,而不是2. 謝謝。
謝謝你的XSL。我試着用我的Visual Studio 2010解決方案使用XslCompiledTransform。它沒有加載XSL,提到for-each-group尚未實現。嘗試google,但找不到解決該問題的答案。 – user2302627 2013-04-21 04:59:06
我確實指出這是一個XSLT 2.0解決方案。用於.NET的XSLT 2.0處理器可以從Saxonica和XmlPrime獲得。微軟的XML技術已經過時了,現在是時候讓自己擺脫困境了。 – 2013-04-22 08:01:59
我沒有選擇。那麼,是否有可能用任何1.0版本的代碼片段替換每個組?我試圖寫一些xslt搜索和理解點點滴滴。遵循xslt: – user2302627 2013-04-22 16:00:53