Как перебрать все элементы в xsl не используя for-each?
От: HammerSpb Россия  
Дата: 13.04.09 10:38
Оценка:
Может кто знает, нужно перебрать элементы в xml через xsl , но не используя for-each

Есть, например, такой xml
<?xml version="1.0" encoding="WINDOWS-1251"?>
<?xml-stylesheet type='text/xsl' href='dogs.xsl'?>
<tutorial>
<enimals>
  <dogs>
    <dogsCaption>Собаки</dogsCaption>
    <dogsCaptionName>Порода</dogsCaptionName>
    <dogsCaptionWeight>Вес</dogsCaptionWeight>
    <dogsCaptionColor>Цвет</dogsCaptionColor>
    <dog>
      <dogName>Дог</dogName>
      <dogWeight caption="кг">35</dogWeight>
      <dogColor>серый</dogColor>
    </dog>
    <dog>
      <dogName>Овчарка</dogName>
      <dogWeight caption="кг">25</dogWeight>
      <dogColor>чёрная</dogColor>
    </dog>
    <dog>
      <dogName>Пудель</dogName>
      <dogWeight caption="кг">15</dogWeight>
      <dogColor>белый</dogColor>
    </dog>   
  </dogs>
</enimals>
</tutorial>


Есть xsl c for-each
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<table border="1">
  <tr bgcolor="#CCCCCC">
    <td align="center"><strong><xsl:value-of select="//dogsCaptionName"/></strong></td>
    <td align="center"><strong><xsl:value-of select="//dogsCaptionWeight"/></strong></td>
    <td align="center"><strong><xsl:value-of select="//dogsCaptionColor"/></strong></td>
  </tr>
  <xsl:for-each select="tutorial/enimals/dogs/dog">
  <tr bgcolor="#F5F5F5">
    <td><xsl:value-of select="dogName"/></td>
    <td align="right"><xsl:value-of select="dogWeight"/> <xsl:value-of select="dogWeight/@caption"/></td>
    <td><xsl:value-of select="dogColor"/></td>
  </tr>
  </xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Re: Как перебрать все элементы в xsl не используя for-each?
От: ADVer  
Дата: 14.04.09 08:26
Оценка:
Здравствуйте, HammerSpb, Вы писали:

перебрать элементы в xml через xsl , но не используя for-each


Используйте <xsl:apply-templates select="..."/>


HS>Может кто знает, нужно перебрать элементы в xml через xsl , но не используя for-each


HS>Есть, например, такой xml

HS>
HS><?xml version="1.0" encoding="WINDOWS-1251"?>
HS><?xml-stylesheet type='text/xsl' href='dogs.xsl'?>
HS><tutorial>
HS><enimals>
HS>  <dogs>
HS>    <dogsCaption>Собаки</dogsCaption>
HS>    <dogsCaptionName>Порода</dogsCaptionName>
HS>    <dogsCaptionWeight>Вес</dogsCaptionWeight>
HS>    <dogsCaptionColor>Цвет</dogsCaptionColor>
HS>    <dog>
HS>      <dogName>Дог</dogName>
HS>      <dogWeight caption="кг">35</dogWeight>
HS>      <dogColor>серый</dogColor>
HS>    </dog>
HS>    <dog>
HS>      <dogName>Овчарка</dogName>
HS>      <dogWeight caption="кг">25</dogWeight>
HS>      <dogColor>чёрная</dogColor>
HS>    </dog>
HS>    <dog>
HS>      <dogName>Пудель</dogName>
HS>      <dogWeight caption="кг">15</dogWeight>
HS>      <dogColor>белый</dogColor>
HS>    </dog>   
HS>  </dogs>
HS></enimals>
HS></tutorial>
HS>


HS>Есть xsl c for-each

HS>
HS><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
HS><xsl:template match="/">
HS><table border="1">
HS>  <tr bgcolor="#CCCCCC">
HS>    <td align="center"><strong><xsl:value-of select="//dogsCaptionName"/></strong></td>
HS>    <td align="center"><strong><xsl:value-of select="//dogsCaptionWeight"/></strong></td>
HS>    <td align="center"><strong><xsl:value-of select="//dogsCaptionColor"/></strong></td>
HS>  </tr>
HS>  <xsl:for-each select="tutorial/enimals/dogs/dog">
HS>  <tr bgcolor="#F5F5F5">
HS>    <td><xsl:value-of select="dogName"/></td>
HS>    <td align="right"><xsl:value-of select="dogWeight"/> <xsl:value-of select="dogWeight/@caption"/></td>
HS>    <td><xsl:value-of select="dogColor"/></td>
HS>  </tr>
HS>  </xsl:for-each>
HS></table>
HS></xsl:template>
HS></xsl:stylesheet>
HS>
Re: Как перебрать все элементы в xsl не используя for-each?
От: Linoge-Fly Украина http://users.livejournal.com/_linoge_/
Дата: 14.04.09 14:49
Оценка:
Здравствуйте, HammerSpb, Вы писали:

HS>Может кто знает, нужно перебрать элементы в xml через xsl , но не используя for-each


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  
<xsl:template match="/">
<table border="1">
  <tr bgcolor="#CCCCCC">
    <td align="center"><strong><xsl:value-of select="//dogsCaptionName"/></strong></td>
    <td align="center"><strong><xsl:value-of select="//dogsCaptionWeight"/></strong></td>
    <td align="center"><strong><xsl:value-of select="//dogsCaptionColor"/></strong></td>
  </tr>
  <xsl:apply-templates select="tutorial/enimals/dogs"/>
</table>
</xsl:template>

<xsl:template match="dogs">
  <xsl:apply-templates select="dog"/>
</xsl:template>

<xsl:template match="dog">
  <tr bgcolor="#F5F5F5">
    <td><xsl:value-of select="dogName"/></td>
    <td align="right"><xsl:value-of select="dogWeight"/> <xsl:value-of select="dogWeight/@caption"/></td>
    <td><xsl:value-of select="dogColor"/></td>
  </tr>
</xsl:template>

</xsl:stylesheet>
... << RSDN@Home 1.2.0 alpha 4 rev. 1144>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.