XSLT для каждого не может извлечь значения - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь преобразовать xml в желаемый xml, используя xslt. Но я не могу использовать для - каждый правильно, и значения возвращаются нулевые. Может ли кто-нибудь помочь с преобразованием 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>

Ниже приведен вывод, который он возвращает

В приведенном ниже выводе, который он возвращает, отсутствует 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>

Ответы [ 2 ]

2 голосов
/ 31 января 2020
Только

Изменить следующий код

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

изменить на

<xsl:if test="not(normalize-space(message/Lines/Nbr)='')">
0 голосов
/ 31 января 2020

Я настроил все выражения 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>

Выход 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...