XSLT for-each 无法提取值

XSLT for-each not able to extract values

我正在尝试使用 xslt 将 xml 转换为所需的 xml。但我无法正确使用 - 每个值都返回空值。任何人都可以帮助进行 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>

我调整了所有的 XPath 表达式。看看吧。

XSLT

<?xml version="1.0"?>
<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="/message">
        <INB>
            <SEG>
                <TRN>RAN</TRN>
                <VER>8.3</VER>
                <WHS>699</WHS>
                <xsl:for-each select="Lines">
                    <LINE>
                        <SENAM>LINE_SEG</SENAM>
                        <INVSLN>0</INVSLN>
                        <EXPQTY>0</EXPQTY>
                        <xsl:if test="not(normalize-space(Nbr)) = ''">
                            <NUM>
                                <xsl:value-of select="normalize-space(Nbr)"/>
                            </NUM>
                        </xsl:if>
                        <STS>A</STS>
                        <PRT>----</PRT>
                    </LINE>
                </xsl:for-each>
            </SEG>
        </INB>
    </xsl:template>
</xsl:stylesheet>

Output XML

<?xml version='1.0' encoding='UTF-8' ?>
<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>

仅更改以下代码

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

改为

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