2012-05-30 42 views
1

我正在使用XSL編寫讀取XML文件的文本輸出文件。在運行時刪除XSL輸出文件生成

在這裏,我試圖檢查天氣特定內容是否在源XML中可用,並將該內容寫入文件(如果可用)。

但是,如果內容不可用(不滿足「< XSL:if >」條件),則輸出文件將是空文件。

所以我想添加一個else條件和其他條件,以避免在運行時創建XSL輸出文件。

任何身體有任何線索?

< xsl:message terminate =「yes」>不會幫助,因爲它確實會生成輸出,但只會終止XSL的進一步處理。

任何機構都可以幫助甚至建議在Java代碼中採用任何其他方法,即使在創建完成後不刪除文件。 [通過閱讀並識別空文件]

目前我正在使用java讀取創建的空文件並將其明確刪除。非常感謝。

+0

在沒有提供任何代碼的情況下,很難提供特定的幫助。 – ChadNC

回答

1

我舉兩個例子如何可以做到這一點 - 第二個是我的建議:

假設我們有這個XML文檔:

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 

我們要從中產生另一個,其中具有偶數的num元素被「刪除」。

這樣做的一種方式是

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

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

<xsl:template match="num"> 
    <xsl:choose> 
    <xsl:when test=". mod 2 = 1"> 
    <num><xsl:value-of select="."/></num> 
    </xsl:when> 
    <!-- <xsl:otherwise/> --> 
    </xsl:choose> 
</xsl:template> 
</xsl:stylesheet> 

通緝結果產生

<nums> 
    <num>01</num> 
    <num>03</num> 
    <num>05</num> 
    <num>07</num> 
    <num>09</num> 
</nums> 

執行通知:對於 「什麼都不做」,你甚至不要不需要<xsl:otherwise>,它被註釋掉了。

更好的解決方案

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

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

<xsl:template match="num[. mod 2 = 0]"/> 
</xsl:stylesheet> 

這產生相同的正確的結果。

在這裏,我們用一個模板匹配num具有偶數值和空主體的元素覆蓋身份規則 - 執行「刪除」。

執行通知

在這裏我們不使用任何「IF-THEN-ELSE」的明確指示不惜一切 - 只是Xtemplate模式匹配,這是XSLT的最顯着的特點。

+0

非常感謝您的時間先生, 我需要的是避免輸出文件在運行時在else部分內生成。 我有些感覺,這不能在XSL內部完成,但會給我們所有人帶來一個不錯的話題。 即使我們可以在java結束時解決這個問題,但我們非常感謝您的幫助。 再次感謝:) – Dilruk

+0

@dilruk:鑑於提供的信息,我已經盡最大可能回答了您的問題。如果您覺得這不能解決您的問題,請編輯問題並提供一個完整的(儘可能小)的實例。不要讓人們試圖猜測問題是什麼。 –

+0

我需要的是避免在運行時生成輸出文件。 [檢查條件後] 可以說我想檢查11號是否存在於上述xml文件中。如果它不存在,我不想擁有輸出文件,因爲我只需要具有數字11的文件。 因爲在此之後,我可以假設所有正在生成的輸出文件都有num 11,所以我可以做進一步處理而不在java端進行進一步的過濾。 – Dilruk