2017-06-18 16 views
1

xsl:ifタグをxsltからすべて削除する方法はありますか?Javaを使用してxsltからすべてのxsl:ifタグを削除する

私はすべてのタグ名を取得したいxsltを持っています。私はこのxslが書かれているxmlの入力にアクセスできないので、dummy.xmlとoutput.xmlを生成するためにxslを適用し、そのoutput.xmlからすべてのノードの名前を取得しています。しかし、問題は、xslには、特定の値がnullでないかどうかをチェックする条件があることがあります。そのタグだけが出力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> 

ありません私は私のダミーのXML出力XMLにこのXSLを適用する場合の条件付きタグが含まれていません。

だから私はxsltから条件をすべて削除して、私が望むようにxmlを生成できるようにしたいと思います。

私が欲しい

の予想される出力はありませんXSLとXSLTです:

<?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> 

注::ifタグで、XSLTで何千ものがあるので、私は取引日と変更インジケータの値が含まれるようにダミーのXMLを変更することはできません私はこの行動をしたい。

答えて

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

はあなたの応答をありがとうございました –

関連する問題