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)='')">
我正在尝试使用 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)='')">