2014-11-02 47 views
0

我是XSL的新手,我有兩個有關多個子元素的問題。使用XSLT將數個級別的XML與一個級別的XML結合使用

我有我的XML文檔中的結構如下:

<root> 
    <levelOne> 
    <entry1>Test1</entry1> 
    <entry2>Test2</entry2> 
    <levelTwo> 
     <entry3>Test3</entry3> 
     <entry4>Test4</entry4> 
     <levelThree> 
     <entry5>Test5</entry5> 
     <entry6>Test6</entry6> 
     </levelThree> 
    </levelTwo> 
    </levelOne> 
    <levelOne> 
    <entry1>Test1</entry1> 
    <entry2>Test2</entry2> 
    <levelTwo> 
     <entry3>Test3</entry3> 
     <entry4>Test4</entry4> 
     <levelThree> 
     <entry5>Test5</entry5> 
     <entry6>Test6</entry6> 
     </levelThree> 
    </levelTwo> 
    </levelOne> 
    <!-- etc. --> 
</root> 

我的XSL是這樣的:

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="root"> 
<resultlistEntries> 
    <xsl:for-each select="levelOne"> 
     <entry1><xsl:value-of select="entry1"/></entry1> 
     <entry2><xsl:value-of select="entry2"/></entry2> 
     <!-- address child elements? --> 
    </xsl:for-each> 
</resultlistEntries> 
</xsl:template> 
</xsl:stylesheet> 

我想進入3,4,5,6等,是一個在我的輸出XML文檔中有相同的級別。因此,預期輸出應該是這樣的:

<root> 
    <levelOne> 
    <entry1>Test1</entry1> 
    <entry2>Test2</entry2> 
    <entry3>Test3</entry3> 
    <entry4>Test4</entry4> 
    <entry5>Test5</entry5> 
    <entry6>Test6</entry6> 
    <entry1>Test1</entry1> 
    <entry2>Test2</entry2> 
    <entry3>Test3</entry3> 
    <entry4>Test4</entry4> 
    <entry5>Test5</entry5> 
    <entry6>Test6</entry6> 
    <!-- etc. --> 
</root> 
  1. 怎麼可能解決一個子元素 (第三,第四等級別)的子元素?
  2. 如何將所有這些子元素 元素放在一個級別上(在我的示例中,在resultlistEntries中)?
+0

請發表您的預期輸出代碼。 – 2014-11-02 13:32:19

+0

編輯我的帖子。 – John 2014-11-02 14:07:37

回答

0

假設各種<entryX>內容沒有任何共同之處,除了他們都隨身攜帶一個文本節點,嘗試:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="*[text()]" > 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
+0

非常感謝您的回答!所有的元素名稱都是已知的,XML元素的結構總是相同的。 – John 2014-11-02 14:51:57

+0

@John我在同一時間編輯了我的答案,因爲輸出不是你要求的。我仍然沒有看到用名稱來解決所有元素的方法。 – 2014-11-02 14:52:57