即使 XML 标签为空,仍然会打印(xml version =“1.0”encoding ='utf-8')

问题描述 投票:0回答:1

我对我目前正在处理的 XSL 脚本有疑问。

脚本正在运行,没有遇到错误,但是,我的问题出在一些不应该打印的字段上。

参见下面的片段:

<xsl:if test="not(Payee/RemitAdviceEmail='')">
<RltdRmtInf>
<RmtLctnMtd>
<xsl:text>EMAL</xsl:text>
</RmtLctnMtd>
<RmtLctnElctrncAdr>
<xsl:value-of select="Payee/RemitAdviceEmail"/>
</RmtLctnElctrncAdr>
</RltdRmtInf>
</xsl:if>

因为我有一个条件,如果Payee/RemitAdviceEmail不为空,那么以下内容将打印在xml中。

<RltdRmtInf>
<RmtLctnMtd>EMAL</RmtLctnMtd>
<RmtLctnElctrncAdr>[email protected]</RmtLctnElctrncAdr>
</RltdRmtInf>

同时,如果 Payee/RemitAdviceEmail 为空,则不会打印整个 RltdRmtInf。

但是,在我最近使用此脚本运行的 xml 上,我得到了以下结果:

<RltdRmtInf>
<RmtLctnMtd>EMAL</RmtLctnMtd>
<RmtLctnElctrncAdr/>
</RltdRmtInf>

我检查了 xml 以找到 Payee/RemitAdviceEmail xpath,并且确认 RemitAdviceEmail 甚至不存在于 Payee 下或整个 xml 中。既然它不存在,那么整个 RltdRmtInf 是否也不应该被打印出来?

感谢您对此的回应。

谢谢大家!

预期输出:

整个标签不应打印在 xml 上

实际产量:

<RltdRmtInf>
<RmtLctnMtd>EMAL</RmtLctnMtd>
<RmtLctnElctrncAdr/>
</RltdRmtInf>
xml xpath xslt
1个回答
0
投票

在 XSLT 中,空结果仍然是结果。这意味着,即使

<xsl:if>
语句内的条件计算结果为 false 并且内部元素未填充,它们仍将在结果 XML 中作为空元素输出。

为了防止在不满足条件时输出整个

<RltdRmtInf>
元素,您应该将整个块封装在
<xsl:if>
语句中。以下是修改 XSLT 以实现所需行为的方法:

    <xsl:if test="not(Payee/RemitAdviceEmail='')">
    <RltdRmtInf>
        <RmtLctnMtd>EMAL</RmtLctnMtd>
        <RmtLctnElctrncAdr>
            <xsl:value-of select="Payee/RemitAdviceEmail"/>
        </RmtLctnElctrncAdr>
    </RltdRmtInf>
</xsl:if>

这样,如果不满足条件(即 Payee/RemitAdviceEmail 为空或不存在),整个

<RltdRmtInf>
元素及其子元素将不会在结果 XML 中输出。

© www.soinside.com 2019 - 2024. All rights reserved.