我正在生成XML文件并使用XSLT删除任何空白标记或属性。
我最近运行了一个修改,我需要保留一个特定的属性,即使它是空白/ null。
这是我正在使用的XLST:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes" />
<xsl:template match="@*|node()">
<xsl:if test=". != ''">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
以下是我的XML部分应该是什么样子。
<patientClinical noClinicalData="">
<orgFacilityCode>000200</orgFacilityCode>
<orgPatientId>123456</orgPatientId>
</patientClinical>
我希望保留“noClinicalData”属性,无论其值如何。目前,如果它为null或为空,我的XLST将删除它并离开
<patientClinical>
<orgFacilityCode>000200</orgFacilityCode>
<orgPatientId>123456</orgPatientId>
</patientClinical>
这是我希望保留的唯一属性。在我的XML中,如果其他属性为空/空,我希望将它们删除。无论如何要修改我的XLST步骤以跳过此属性吗?
感谢您的帮助。
答案 0 :(得分:1)
只需在测试表达式中添加第二个条件:
<xsl:if test=". != '' or name() = 'noClinicalData'">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
答案 1 :(得分:1)
使用:
<xsl:if test=". != '' or name()='noClinicalData'">
这样,您的身份转换也会在属性noClinicalData
上执行。
在上下文中:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes" />
<xsl:template match="@*|node()">
<xsl:if test=". != '' or name()='noClinicalData' ">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>