如何在for-each循环中根据属性值放置条件

时间:2010-07-19 10:59:22

标签: xml xslt xpath

我在xsl中有一个循环,根据属性值,我想写一些文字。

XML如下:

<ROWS><ROW oid="28439"><EFL eid="8" fid="27672" count="2">
 <MK id="3" val="0"/>
 <MK id="11" val="0578678             "/> </ROW></ROWS>

XSL如下:

<xsl:for-each select="EFL/MK">
         <xsl:value-of select="@id" />: 
        <xsl:value-of select="@val" />
      </xsl:for-each>

我希望得到以下输出:
3:0 &amp; 11:057868

如果有多个“ MK ”标记,则需要

“&amp;”。 “MK”标签的计数在“”标签的“计数”属性中可用。

请告诉我如何在XSL中添加以下条件:

如果行标记中的 Count Atrribute 的值大于1则       显示“&amp;” ENDIF

由于

2 个答案:

答案 0 :(得分:1)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="ROWS/ROW">
   <xsl:for-each select="EFL/MK">
    <xsl:value-of select=
     "concat(substring(' &amp; ', 1 div (position() > 1)),
             @id,
             ':',
             @val,
             substring('&#xA;', 1 div (position() = last()))
             )
     "/>
   </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档(更正格式正确):

<ROWS>
 <ROW oid="28439">
   <EFL eid="8" fid="27672" count="2">
    <MK id="3" val="0"/>
    <MK id="11" val="0578678"/>
   </EFL>
 </ROW>
</ROWS>

生成想要的正确结果

3:0 & 11:0578678

答案 1 :(得分:-1)

试试这段代码:

<xsl:for-each select="EFL/MK">
  <xsl:value-of select="@id" />: 
  <xsl:value-of select="@val" />
  <xsl:if test="../@count &gt; 1">
    <xsl:if test="not(position()=last())"><![CDATA[ &  ]]></xsl:if>
  </xsl:if>
</xsl:for-each>