如何在XSLT 1.0中排除XML输出中的指定空元素
需求:仅隐藏特定空XML标签(非全局生效)
我需要实现:当特定无属性的空标签为空时,阻止其在XML输出中显示。目前找到的方案都是全局应用于整个XSLT文档,不符合需求,我只需要隐藏少数几个空标签。
补充说明:
我定义的空元素是指输出中显示为<Nm></Nm>且标签间无文本的元素。
两种应用场景
场景1:包含子元素的元素
如果<ClrSysMmbId>标签间无文本,则<ClrSysMmbId>和其子元素<MmbId>都不显示:
<ClrSysMmbId> <-- Remove if null <MmbId/> <-- Remove if null </ClrSysMmbId>
场景2:无嵌套子元素的元素
输入示例:
<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>
内容的提问来源于stack exchange,提问作者Lindsay A.
相关产品推荐
相关产品推荐

