Как разместить условие на основе значения атрибута в цикле for-each - PullRequest
2 голосов
/ 19 июля 2010

У меня есть цикл в 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 & 11: 057868

"&" необходимо, если естьболее одного тега " MK ".Количество тегов "MK" доступно в атрибуте " Count " тега " Row ".

Подскажите, пожалуйста, как поставить следующее условие if в XSL:

, если Атрибут счета , доступный в Тег строки имеет значение большечем 1, то отобразить "&" EndIF

Спасибо

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Это преобразование :

<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
0 голосов
/ 19 июля 2010

Попробуйте этот код:

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