Xml XSLT for each无法提取值
我正在尝试使用xslt将xml转换为所需的xml。但是我不能正确地使用for-each,值返回null。任何人都可以帮助进行xslt转换 这是你的电话号码 我正在使用的XSLTXml XSLT for each无法提取值,xml,xslt,transformation,Xml,Xslt,Transformation,我正在尝试使用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: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>
跑
8.3
699
线路分段
0
0
A.
----
以下是输入XML:
<message>
<PoNbr>451617926</PoNbr>
<whCode/>
<unitCode/>
<dnrbTime/>
<Lines>
<Nbr>451617926</Nbr>
</Lines>
<Lines>
<Nbr>2</Nbr>
</Lines>
</message>
<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>
451617926
451617926
2.
下面是它返回的输出
在下面返回的输出中,没有使用for-each语句映射的Nbr
输出:
<message>
<PoNbr>451617926</PoNbr>
<whCode/>
<unitCode/>
<dnrbTime/>
<Lines>
<Nbr>451617926</Nbr>
</Lines>
<Lines>
<Nbr>2</Nbr>
</Lines>
</message>
<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>
跑
8.3
699
线路分段
0
0
A.
----
线路分段
0
0
A.
----
预期输出:
<message>
<PoNbr>451617926</PoNbr>
<whCode/>
<unitCode/>
<dnrbTime/>
<Lines>
<Nbr>451617926</Nbr>
</Lines>
<Lines>
<Nbr>2</Nbr>
</Lines>
</message>
<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>
跑
8.3
699
线路分段
0
0
451617926
A.
----
线路分段
0
0
2.
A.
----
我调整了所有XPath表达式。看看吧
XSLT
跑
8.3
699
线路分段
0
0
A.
----
输出XML
跑
8.3
699
线路分段
0
0
451617926
A.
----
线路分段
0
0
2.
A.
----
我调整了所有XPath表达式。看看吧
XSLT
跑
8.3
699
线路分段
0
0
A.
----
输出XML
跑
8.3
699
线路分段
0
0
451617926
A.
----
线路分段
0
0
2.
A.
----
仅更改以下代码
<xsl:if test="not(normalize-space(message/Lines/Nbr)) = ''">
改为
<xsl:if test="not(normalize-space(message/Lines/Nbr)='')">
仅更改以下代码
<xsl:if test="not(normalize-space(message/Lines/Nbr)) = ''">
改为
<xsl:if test="not(normalize-space(message/Lines/Nbr)='')">
还需要修复主要缺陷;主要错误是无法理解xsl:for each
更改上下文的常见错误。还需要修复主要错误;主要缺陷是无法理解xsl:for each
更改了上下文。此解决方案无法修复@ajeetingh在test
表达式中指出的错误。表达式not(规范化空间(Nbr))
在此数据集上返回false。在XPath 2.0下,将false与“”进行比较是一个错误,但在XPath 1.0下返回true。所以它(在这个数据上)是偶然工作的——这是一个典型的例子,说明了为什么XPath 2.0中更强大的类型检查是可取的。有些人不喜欢隐式string->boolean转换,我也不喜欢,但这个习惯用法非常常见和方便,我很乐意使用它。Saxon对其进行了优化—它实际上并不构造规范化字符串,只是测试是否存在任何非空格字符。此解决方案无法修复@Ajeetingh在测试表达式中指出的错误。表达式not(规范化空间(Nbr))
在此数据集上返回false。在XPath 2.0下,将false与“”进行比较是一个错误,但在XPath 1.0下返回true。所以它(在这个数据上)是偶然工作的——这是一个典型的例子,说明了为什么XPath 2.0中更强大的类型检查是可取的。有些人不喜欢隐式string->boolean转换,我也不喜欢,但这个习惯用法非常常见和方便,我很乐意使用它。Saxon对其进行了优化——它实际上并没有构造规范化字符串,只是测试是否存在任何非空格字符。