首页 > 解决方案 > XSLT for-each 无法提取值

问题描述

我正在尝试使用 xslt 将 xml 转换为所需的 xml。但我无法正确使用 for - each 并且值返回 null。任何人都可以帮助进行 xslt 转换。

这是 我正在使用的 XSLT

<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="/">
        <INB>
            <SEG>
                <TRN>RAN</TRN>
                <VER>8.3</VER>
                <WHS>699</WHS>
                <xsl:for-each select="message/Lines">
                    <LINE>
                        <SENAM>LINE_SEG</SENAM>
                        <INVSLN>0</INVSLN>
                        <EXPQTY>0</EXPQTY>
                        <xsl:if test="not(normalize-space(message/Lines/Nbr)) = ''">
                            <NUM>
                                <xsl:value-of select="normalize-space(message/Lines/Nbr)"/>
                            </NUM>
                        </xsl:if>
                        <STS>A</STS>
                        <PRT>----</PRT>
                    </LINE>
                </xsl:for-each> 
            </SEG>
        </INB>
    </xsl:template>
</xsl:stylesheet>

这是输入 XML:

<message>
    <PoNbr>451617926</PoNbr>
    <whCode/>
    <unitCode/>
    <dnrbTime/>
    <Lines>
        <Nbr>451617926</Nbr>
    </Lines>
    <Lines>
        <Nbr>2</Nbr>
    </Lines>
</message>

下面是它返回的输出

在它返回的以下输出中,没有使用 for each 语句映射的 Nbr。

输出:

<INB>
    <SEG>
        <TRN>RAN</TRN>
        <VER>8.3</VER>
        <WHS>699</WHS>
        <LINE>
            <SENAM>LINE_SEG</SENAM>
            <INVSLN>0</INVSLN>
            <EXPQTY>0</EXPQTY>
            <NUM/>
            <STS>A</STS>
            <PRT>----</PRT>
        </LINE>
        <LINE>
            <SENAM>LINE_SEG</SENAM>
            <INVSLN>0</INVSLN>
            <EXPQTY>0</EXPQTY>
            <NUM/>
            <STS>A</STS>
            <PRT>----</PRT>
        </LINE>
    </SEG>
</INB>

预期输出:

<INB>
    <SEG>
        <TRN>RAN</TRN>
        <VER>8.3</VER>
        <WHS>699</WHS>
        <LINE>
            <SENAM>LINE_SEG</SENAM>
            <INVSLN>0</INVSLN>
            <EXPQTY>0</EXPQTY>
            <NUM>451617926</NUM>
            <STS>A</STS>
            <PRT>----</PRT>
        </LINE>
        <LINE>
            <SENAM>LINE_SEG</SENAM>
            <INVSLN>0</INVSLN>
            <EXPQTY>0</EXPQTY>
            <NUM>2</NUM>
            <STS>A</STS>
            <PRT>----</PRT>
        </LINE>
    </SEG>
</INB>

标签: xmlxslttransformation

解决方案


仅更改以下代码

<xsl:if test="not(normalize-space(message/Lines/Nbr)) = ''">

改成

<xsl:if test="not(normalize-space(message/Lines/Nbr)='')">

推荐阅读