我有什么办法可以从xslt中删除所有xsl:if
个标签吗?
我有一个xslt,我想从中检索所有标签名称。我没有访问输入这个xsl的输入xml所以我已经创建了虚拟xml并在其上应用了xsl来生成output.xml,并且从该output.xml我正在检索所有节点的名称。但问题是在xsl中有if
条件来检查特定值是否为null,然后只将该标记写入输出xml。那么有没有办法从xslt中删除所有xsl:if标签?
dummy 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不包含带有if条件的标记。
所以我想从xslt中删除所有if条件,这样我就可以生成我想要的xml。
我想要的预期输出是xslt,没有xsl:if标签:
<?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。
答案 0 :(得分: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>