2017-06-18 50 views
1

有沒有什麼辦法可以從xslt中刪除所有xsl:if標記?使用Java從xslt中刪除所有xsl:if標記

我有一個xslt從中我想檢索所有的標籤名稱。我無法訪問爲此xsl編寫的輸入xml,因此我製作了虛擬xml並在其上應用xsl以生成output.xml,並從output.xml中檢索所有節點的名稱。但問題是,在xsl中有if條件來檢查特定值是否爲空,那麼只有該標籤將寫入輸出xml。那麼有沒有辦法從xslt中刪除所有xsl:if標籤?

虛擬的xml:

<?xml version="1.0" encoding="UTF-8"?> 
<map> 
</map> 

XSL代碼:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> 


<xsl:strip-space elements="*" /> 

<xsl:template match="/map"> 

<xsl:attribute name="xsi:noNamespaceSchemaLocation"> 
<xsl:text>Test</xsl:text> 
</xsl:attribute> 
<xsl:if test="@TRANSACTIONDATETIME != ''"> 
<xsl:element name="TransactionDateTime"> 
<xsl:value-of select="@TRANSACTIONDATETIME"/> 
</xsl:element> 
</xsl:if> 
<xsl:if test="@CHANGEINDICATOR != ''"> 
<xsl:element name="ChangeIndicator"> 
<xsl:value-of select="@CHANGEINDICATOR"/> 
</xsl:element> 
</xsl:if> 

</xsl:template>  

</xsl:stylesheet> 

沒有當我這個XSL應用到我的虛擬XML輸出XML不包括與如果條件標記。

所以我想刪除所有條件從xslt,以便我可以生成xml,因爲我想要的。

預計輸出我要的是XSLT沒有XSL:如果標籤:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> 


<xsl:strip-space elements="*" /> 

<xsl:template match="/map"> 

<xsl:attribute name="xsi:noNamespaceSchemaLocation"> 
<xsl:text>Test</xsl:text> 
</xsl:attribute> 
<xsl:element name="TransactionDateTime"> 
<xsl:value-of select="@TRANSACTIONDATETIME"/> 
</xsl:element> 
<xsl:element name="ChangeIndicator"> 
<xsl:value-of select="@CHANGEINDICATOR"/> 
</xsl:element> 

</xsl:template>  

</xsl:stylesheet> 

注:我不能修改虛擬XML,因爲有成千上萬的XSLT在其上包括交易日期和改變指標值我想要執行此操作。

回答

1

您可以使用一個小的XSLT:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

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

    <!-- Special template for xsl:if, only copies content --> 
    <xsl:template match="xsl:if"> 
    <xsl:apply-templates select="node()"/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

非常感謝您的回覆 –