2013-02-04 71 views
0

XSLT會將以下XML模式轉換爲以下HTML輸出內容嗎?如何使用XML註釋進行XSLT轉換?

<ELEMENT1> 
    <!-- 
    Comment for element 2 
    --> 
    <ELEMENT2> 
    <ELEMENT3>ABC</ELEMENT3> 
    </ELEMENT2> 
    <!-- 
    Comment for element 4 
    --> 
    <ELEMENT4> 
    <ELEMENT5>0534564117</ELEMENT5> 
    <!-- 
     Comment for element 6 
    --> 
    <ELEMENT6>123456</ELEMENT6> 
    </ELEMENT4> 
</ELEMENT1> 

輸出:

  • 元素1
    • 註釋爲元素
    • 元素2
      • 元素3
    • 簡評供元4
    • 元素4
      • 元素5
      • 評論的元素6
      • 元素6
+0

請注意您的條款/錯別字。你剛剛創建了一個錯字標籤。 – Charles

回答

1

你會想有三個模板的樣式表。一個模板匹配文檔根併發出外部HTML結構,並像往常一樣在所有子節點上重複出現。它將所有其他內容封裝在HTML無序列表中。

<xsl:template match="/"> 
    <html> 
    <head><title>Demo document</title></head> 
    <body> 
     <ul> 
     <xsl:apply-templates/> 
     </ul> 
    </body> 
    </html> 
</xsl:template> 

一個模板通過發出包含元素類型名稱的列表項來處理元素。如果元素有子元素,則會在元素上重複出現,並將其輸出封裝在嵌套的ul元素中。

<xsl:template match="*"> 
    <li> 
    <xsl:value-of select="name()"/> 
    <xsl:if test="node()"> 
     <ul> 
     <xsl:apply-templates select="node()"/> 
     </ul> 
    </xsl:if> 
    </li> 
</xsl:template> 

如果你不介意發射空ul元素(大多數瀏覽器不特別在意),你可以在不環繞嵌套ulxsl:if做。

第三個模板匹配註釋併爲它們發出列表項,將註釋的內容包裝在i元素中。

<xsl:template match="comment()"> 
    <li><i><xsl:value-of select="."/></i></li> 
</xsl:template> 

如果文本節點的默認模板不可接受,您可能還需要一個模板來處理文本節點。

+0

當我運行上述模板時,我似乎獲得了標籤內的數據。我想排除數據,只有標籤名稱和評論。 – CJ7

+0

@ CJ7排除文本節點,您可以添加一個''來禁止打印它們,或者在遞歸時通過使用''(僅選擇元素和註釋節點,因爲node()也包含文本節點)。 –

+0

@IanRoberts:我如何禁止打開'<?xml'行? – CJ7

0

您可能正在尋找的東西是xsl:comment指令,它會在輸出中創建註釋。