我正在寻找一种方法来防止显示没有属性的特定空标签(如果它为空)。我只能找到应用于整个 XSLT 文档的解决方案,这不是我需要的。我只需要一些我不想显示的空标签。
<Cdtr>
<Nm>Institution Name</Nm>
<PstlAdr>
<PstCd>12345</PstCd>
<TwnNm>Town</TwnNm>
<CtrySubDvsn/> <-- Remove if null
<Ctry>JP</Ctry>
<AdrLine>123 Imaginary Drive</AdrLine>
</PstlAdr>
<CtctDtls/>
</Cdtr>
应显示如下:
<Cdtr>
<Nm>Institution Name</Nm>
<PstlAdr>
<PstCd>12345</PstCd>
<TwnNm>Town</TwnNm>
<Ctry>JP</Ctry>
<AdrLine>123 Imaginary Drive</AdrLine>
</PstlAdr>
<CtctDtls/>
</Cdtr>
我在
<CtrySubDvsn>
元素上尝试过这个:
<xsl:if test="not(CtrySubDvsn='')">
<CtrySubDvsn>
<xsl:value-of select="SupplierorParty/Address/State" />
</CtrySubDvsn>
</xsl:if>
它没有返回错误,但仍然像这样打印:
<Cdtr>
<Nm>Institution Name</Nm>
<PstlAdr>
<PstCd>12345</PstCd>
<TwnNm>Town</TwnNm>
<CtrySubDvsn/>
<Ctry>JP</Ctry>
<AdrLine>123 Imaginary Drive</AdrLine>
</PstlAdr>
<CtctDtls/>
</Cdtr>
要删除没有任何属性或子节点(即元素、文本节点、注释或处理指令)的
CtrySubDvsn
元素,同时保持其他所有内容不变,您可以执行以下操作:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="CtrySubDvsn[not(@*|node())]" />
</xsl:stylesheet>