根据xslt中的输入条件限制Line项的出现

时间:2015-12-04 08:29:26

标签: xslt

只有在输入文件中E1EP01 / CODE = WK30和E1EP01 / E1EP19 / TEXT的值不为空时,我才需要在输出结构中填充行项E1EP01。 我写了下面的代码行,但是即使CODE的值等于WK30且TEXT不是空白,E1EP01也没有出现在输出中 有人可以帮我吗?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <ORDERS05>
         <IDOC>
            <xsl:if test=" ZXX/IDOC/E1EP01/CODE = &apos;WK30&apos; and ZXX/IDOC/E1EP01/E1EP19/TEXT!= &apos; &apos;">
               <xsl:for-each select="E1EP01">
                  <E1EP01>
                     <POSEX>
                        <xsl:value-of select="ZXX/IDOC/E1EP01/POSEX"/>
                     </POSEX>
                  </E1EP01>
                </xsl:for-each>
            </xsl:if>
         </IDOC>
      </ORDERS05>
   </xsl:template>
</xsl:stylesheet>

示例输入如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<ZXX>
   <IDOC BEGIN="1">
      <E1EP01 SEGMENT="1">
         <POSEX>00020</POSEX>
         <CODE>WN14</WERKS>
         <E1EP19 SEGMENT="1">
            <Q>001</Q>
            <TEXT>000000000000204034</TEXT>
         </E1EP19>
       </E1EP01>
      <E1EP01 SEGMENT="1">
        <POSEX>00010</POSEX>
        <WERKS>WK30</WERKS>
        <E1EP19 SEGMENT="1">
            <Q>001</Q>
            <TEXT>000000000000205115</TEXT>
        </E1EP19>
      </E1EP01>
   </IDOC>
</ZXX>

1 个答案:

答案 0 :(得分:0)

变化:

<xsl:for-each select="E1EP01">

为:

<xsl:for-each select="ZXX/IDOC/E1EP01">

注意:您不需要在测试表达式中将单引号转义为&apos;

加了:

  

我需要测试每个E1EP01的条件以及条件是否匹配   那么E1EP01应该出现在输出中。

以这种方式尝试,然后:

XSLT 1.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/ZXX">
    <ORDERS05>
        <IDOC>
            <xsl:for-each select="IDOC/E1EP01[CODE='WK30' and E1EP19/TEXT!='']">
                <xsl:copy>
                    <xsl:copy-of select="POSEX"/>
                </xsl:copy>
            </xsl:for-each>
        </IDOC>
    </ORDERS05>
</xsl:template>

</xsl:stylesheet>