2012-08-22 89 views
0

努力通過使用XSLT找到執行以下操作的方法,感謝您的任何幫助。 RJXSLT將節點移動到一個新創建的元素

輸入:

<root> 
    <a>a1</a> 
    <b>b1</b> 
    <c>c1</c> 
    <a>a2</a> 
    <b>b2</b> 
    <c>c2</c> 
    ... 
</root> 

輸出:

<root> 
    <item> 
     <a>a1</a> 
     <b>b1</b> 
     <c>c1</c> 
    </item> 
    <item> 
     <a>a2</a> 
     <b>b2</b> 
     <c>c2</c> 
    </item> 
    ... 
</root> 
+0

你好,歡迎來到StackOverflow!儘管包括你所做的輸入和輸出樣本總是很好的,但如果你試圖解釋變換的規則,也會有很大幫助,否則民衆可能不得不做出假設。如果可能的話,顯示您當前擁有的XSLT也有幫助。謝謝! –

+0

歡迎來到Stack Overflow!請注意,標籤不是關鍵字。也就是說,將可能適用於您的問題的每一個可能的單詞作爲標籤粘貼,對於試圖找到您的問題的其他人不會有幫助。 – Charles

+0

感謝您的建議,我將遵循下一篇文章,Cheers,RJ的規則。 –

回答

0
<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="text()"/> 

    <xsl:template match="/root"> 
     <root> 
      <xsl:apply-templates/> 
     </root> 
    </xsl:template> 
    <xsl:template match="a"> 
     <item> 
      <a><xsl:value-of select="text()"/></a> 
      <b><xsl:value-of select="following-sibling::b/text()"/></b> 
      <c><xsl:value-of select="following-sibling::c/text()"/></c> 
     </item> 
    </xsl:template> 
</xsl:stylesheet> 
2

如果你正在尋找 '基團' 的元素到「項的使用一個元件作爲第一元件一種方法是使用xsl:鍵按照第一個前面的對元素進行分組一個元素

<xsl:key name="items" match="root/*" use="generate-id(preceding-sibling::a[1])" /> 

然後,你可以簡單地匹配一個元素,並將所有元素的關鍵

<xsl:copy-of select="key('items', generate-id())" /> 

擡頭以下是完整的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:key name="items" match="root/*" use="generate-id(preceding-sibling::a[1])" /> 

    <xsl:template match="/root"> 
     <root> 
     <xsl:apply-templates select="@*"/> 
     <xsl:apply-templates select="a" /> 
     </root> 
    </xsl:template> 

    <xsl:template match="a"> 
     <item> 
     <xsl:copy-of select="." /> 
     <xsl:copy-of select="key('items', generate-id())" /> 
     </item> 
    </xsl:template> 
</xsl:stylesheet> 

當應用於您的示例XML時,將輸出以下內容:

<root> 
    <item> 
     <a>a1</a> 
     <b>b1</b> 
     <c>c1</c> 
     <a>a2</a> 
    </item> 
    <item> 
     <a>a2</a> 
     <b>b2</b> 
     <c>c2</c> 
    </item> 
</root> 
相關問題