Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > HTML и CSS
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2010, 17:26   #1
chexov
Новичок
Джуниор
 
Аватар для chexov
 
Регистрация: 01.07.2010
Сообщений: 3
По умолчанию XSLT циклы

Дан такой xml
Код HTML:
<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet href="functions.xsl" type="text/xsl" ?>
<CoverageDSPriv>
  <Module>
.....
        <Method>
  ...
          <LinesCovered>0</LinesCovered>
          <LinesPartiallyCovered>0</LinesPartiallyCovered>
          <LinesNotCovered>16</LinesNotCovered>
          <BlocksCovered>0</BlocksCovered>
          <BlocksNotCovered>305</BlocksNotCovered>
          <Lines>
            <LnStart>25</LnStart>
            <ColStart>0</ColStart>
            <LnEnd>25</LnEnd>
            <ColEnd>0</ColEnd>
            <Coverage>2</Coverage>
            <SourceFileID>1</SourceFileID>
            <LineID>0</LineID>
          </Lines>
          <Lines>
            <LnStart>27</LnStart>
            <ColStart>0</ColStart>
            <LnEnd>27</LnEnd>
            <ColEnd>0</ColEnd>
            <Coverage>2</Coverage>
            <SourceFileID>1</SourceFileID>
            <LineID>1</LineID>
          </Lines>
...
XSLT обрботка данного XML
Код HTML:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="low_coverage" select="50"/>
  <xsl:param name="ok_coverage" select="5"/>
<xsl:template match="/">
    <html>
    <body>
      <h1>This is the coverage report</h1>
      <h2> Method coverage</h2>
      <table style="width:720;border:2px solid black;">
          <tr>
            <td style="font-weight:bold">Method</td>
            <td style="text-align:right;font-weight:bold">Blocks not covered</td>
            <td style="text-align:right;font-weight:bold">% blocks not covered</td>
			<td style="text-align:right;font-weight:bold">number string not covered</td>
          </tr>
        <xsl:for-each select="//Method">
        <xsl:sort order="ascending" select="MethodName"/> 
          <tr>
            <td>
              <xsl:value-of select="MethodFullName"/>
            </td>
            <td style="text-align:right">
              <xsl:value-of select="BlocksNotCovered"/>
            </td>
            <td>
              <xsl:variable name="pct" select="(BlocksNotCovered div (BlocksNotCovered + BlocksCovered))*100"/>
              <xsl:attribute name="style">
                text-align:right;
                <xsl:choose>
                  <xsl:when test="number($pct &gt;= $low_coverage)">background-color:red;</xsl:when>
                  <xsl:when test="number($pct &gt;= $ok_coverage)">background-color:yellow;</xsl:when>
                  <xsl:otherwise>background-color:green;</xsl:otherwise>
                </xsl:choose>
              </xsl:attribute>
              <xsl:value-of select="$pct"/>
            </td>
			<td style="text-align:right">
			<xsl:variable name="pct1" select="(BlocksNotCovered div (BlocksNotCovered + BlocksCovered))*100"/>
			<xsl:choose>
				<xsl:when test="number($pct1 &gt;= $low_coverage)">
					<table style="width:100;border:2px solid black;">
					<tr>
						<xsl:for-each select="Lines">
						<tr>
							<td>
							<xsl:value-of select="LnStart"/>
							<xsl:text>,</xsl:text>
							</td>
						</tr>
						</xsl:for-each>
					</tr>
					</table>
				</xsl:when>
				<xsl:when test="number($pct1 &gt;= $ok_coverage)">
				<table style="width:100;border:2px solid black;">
					<tr>
						<xsl:for-each select="Lines">
						<tr>
							<td>
							<xsl:value-of select="LnStart"/>
							<xsl:text>,</xsl:text>
							</td>
						</tr>
						</xsl:for-each>
					</tr>
					</table>
				</xsl:when>
			</xsl:choose>
            </td>
          </tr>
        </xsl:for-each>
        </table>
    </body>
    </html>
</xsl:template>
 
</xsl:stylesheet>
Вопрос такой как в цикле сравнивать значение у LnStart если мы находимся в следующем узле Lines
Например
Код HTML:
<Lines>
            <LnStart>27</LnStart>
            <ColStart>0</ColStart>
            <LnEnd>27</LnEnd>
            <ColEnd>0</ColEnd>
            <Coverage>2</Coverage>
            <SourceFileID>1</SourceFileID>
            <LineID>1</LineID>
          </Lines>
          <Lines>
            <LnStart>30</LnStart>
            <ColStart>0</ColStart>
            <LnEnd>30</LnEnd>
            <ColEnd>0</ColEnd>
            <Coverage>2</Coverage>
            <SourceFileID>1</SourceFileID>
            <LineID>2</LineID>
          </Lines>
Как сравнить 27 и 30 если я уже в узле Lines у которого LnStart 30?
При просмотри xml через браузер получаю таблицу как на картинке,пытюсь щас сделать чтобы показывало не подряд идущие цифры а участки т.е если внутри LnStart идут 27,28,29 чтобы не писать их через запятую,а писать 27-29)
Цикл для правки:
Код:
<xsl:for-each select="Lines">
<tr>
	<td>
	<xsl:value-of select="LnStart"/>
	xsl:text>,</xsl:text>
	</td>
</tr>
</xsl:for-each>
Изображения
Тип файла: jpg metric.jpg (212.4 Кб, 125 просмотров)
Поступай с людьми так,как они поступают с тобой ...

Последний раз редактировалось chexov; 01.07.2010 в 18:01.
chexov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XSLT аналог hash-table Ivan_32 HTML и CSS 2 05.02.2010 11:09
хитрый xml и его подельник xslt 13th Свободное общение 3 02.02.2010 04:15
PHP, XSLT и динамические инклюды Last_elf PHP 0 16.01.2010 16:28
XSLT преобразование в delphi 7 ZeitGeist7 Компоненты Delphi 19 04.03.2009 21:34
XSLT, XML, RSS-ленты metell Помощь студентам 3 05.02.2009 06:21