2013-06-18 96 views
0

我需要幫助,使用XSLT獲取註釋之間的XML內容。如何使用XSLT讀取註釋之間的XML內容?

XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<bookstore> 
    <book> 
     <title lang="eng">Harry Potter</title> 
     <price>29.99</price> 
    </book> 
    <!-- start comment 1 --> 
    <book> 
     <title lang="it">Learning XML</title> 
     <price>39.95</price> 
    </book> 
    <!-- end comment 1 --> 

</bookstore> 

輸出:

<book> 
      <title lang="it">Learning XML</title> 
      <price>39.95</price> 
     </book> 
+0

XML註釋不是正確的方法。您想要選擇的元素是否還有其他顯着因素? lang屬性?名稱?價錢? –

+0

我的目標是過濾註釋中的XML部分並創建單獨的XML。爲此,我試圖用XSL過濾這個。 – Tarun

回答

-1

依託評論複製是不是真的好。但是,我認爲 - 你有一些理由爲什麼你選擇這樣做。這是我的嘗試。

<xsl:template match="/"> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="comment()"> 
    <xsl:if test="text()='START'"> 
     <!-- Set Flag for copying content <xsl:variable name="dummy" value-of="myPrefix:setFlag()"/> --> 
    </xsl:if> 
    <xsl:if test="text()='END'"> 
     <!-- Reset Flag for stop copying content --> 
    </xsl:if> 
</xsl:template> 

不幸的是,您無法更新XSLT中的變量。也許,你可以嘗試使用你自己的Java類實例,它可以有你的模板檢查標誌的東西來決定是否複製。

2

你可以嘗試這樣的事情......

XML輸入

<bookstore> 
    <book> 
     <title lang="eng">Harry Potter</title> 
     <price>29.99</price> 
    </book> 
    <!-- start comment 1 --> 
    <book> 
     <title lang="it">Learning XML</title> 
     <price>39.95</price> 
    </book> 
    <!-- end comment 1 --> 

</bookstore> 

XSLT 1.0

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

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

    <xsl:template match="/*"> 
     <xsl:apply-templates select="*[preceding-sibling::comment()[starts-with(normalize-space(.),'start')] and 
      following-sibling::comment()[starts-with(normalize-space(.),'end')]]"/> 
    </xsl:template> 

</xsl:stylesheet> 

輸出

<book> 
    <title lang="it">Learning XML</title> 
    <price>39.95</price> 
</book>