XSLT 条件问题

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

当 QUALF 为“012”时,我需要传递 BELNR 值。如果 //E1EDK02/[QUALF=012]/BELNR 为 NULL,则复制 //E1EDK02/[QUALF=002]/BELNR

使用以下代码但出现错误 - 轴步骤 xsl:document/element() 的上下文项不存在

源 XML

<?xml version="1.0" encoding="UTF-8"?>
<DATA>
    <E1EDK02>
        <QUALF>002</QUALF>
        <BELNR>0030000084</BELNR>
    </E1EDK02>
    <E1EDK02>
        <QUALF>026</QUALF>
        <BELNR>0080000000</BELNR>
    </E1EDK02>
    <E1EDK02>
        <QUALF>012</QUALF>
        <BELNR>0090000020</BELNR>
    </E1EDK02>
</DATA>

预期输出

<?xml version="1.0" encoding="UTF-8"?>
<DATA>
    <Target>
        <BELNR>0090000020</BELNR>
    </Target>
</DATA>

XSLT 使用

<xsl:choose>
    <xsl:when test="DATA/E1EDK02[QUALF=012]/BELNR">
        <xsl:value-of select="DATA/E1EDK02[QUALF=012]/BELNR"/>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="DATA/E1EDK02[QUALF=002]/BELNR"/>
    </xsl:otherwise>
</xsl:choose>
xslt xslt-2.0 xslt-3.0
1个回答
0
投票

我认为你可以简单地做:

<xsl:template match="/DATA">
    <xsl:copy>
        <Target>
            <xsl:copy-of select="(E1EDK02[QUALF=012], E1EDK02[QUALF=002])[1]/BELNR"/>
        </Target>
    </xsl:copy>
</xsl:template>
© www.soinside.com 2019 - 2024. All rights reserved.