2010-03-16 3 views
0

Для каждой таблицы в документе я хотел бы определить ее как «простой» или «сложный». Он должен быть «простым», если каждая строка содержит не более двух столбцов, иначе она должна быть «сложной».XSLT: подсчет целых столбцов

Как это сделать с xslt?

+2

Покажите нам свой XML, трудно понять, что вам нужно XSLT. –

+0

Извините. Это общая таблица выглядит как разметка HTML с произвольным количеством ячеек в каждой строке. – Kalinin

ответ

1

Прошу прощения за то, что вы нашли время. Я придумал решение. Вот ответ, если кому-то нужно.

<xsl:template match="TABLE"> 
<xsl:variable name="tableClass"> 
    <xsl:choose> 
     <xsl:when test="count(TBODY/TR[count(child::*) = 2]) = count(TBODY/TR)"> 
      simple 
     </xsl:when> 
     <xsl:otherwise> 
      complicated 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 
<table class="{$tableClass}"> 
    <xsl:apply-templates select="CAPTION"/> 
    <xsl:apply-templates select="TBODY"/> 
    and so on....... 
</table> 

+1

'' – Tomalak

+0

Прошу прощения, но ваше предложение не подходит, количество столбцов должно быть равно 2, а не <= 2. Но все детали. Спасибо. – Kalinin

0

Учитывая два XML-документов, A:

<base> 
    <row> 
    <col1 value='x'/> 
    <col2/> 
    </row> 
    <row> 
    <col1 value='y'/> 
    <col2/> 
    </row> 
    <row> 
    <col1 value='z'/> 
    <col2/> 
    </row> 
</base> 

и B:

<base> 
    <row> 
    <col1/> 
    <col2/> 
    <col3/> 
    </row> 

    <row> 
    <col1/> 
    <col2/> 
    </row> 
</base> 

этот XSL покажет, если это "просто" или "комплекс" на основе на количество дочерних элементов под каждым элементом строки верхнего уровня:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" encoding = "iso-8859-1"/> 

    <!-- is the xml simple? --> 
    <!-- simple, in this case, means each row has 2 or fewer columns --> 


    <xsl:variable name="maxColCount"> 
    <xsl:for-each select="//base/row"> 
     <xsl:sort data-type="number" order="descending"/> 
     <xsl:if test="position()=1"><xsl:value-of select="count(./*)"/></xsl:if> 
    </xsl:for-each> 
    </xsl:variable> 


    <xsl:template match="/"> 
    <xsl:choose> 
     <xsl:when test="$maxColCount > 2">complex</xsl:when> 
     <xsl:otherwise>simple</xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet> 

Результат: A прост, а B - сложный.

+0

Вы забыли добавить select = "count (./*)" вам string . Без этого сортировка не работает. – Kalinin

Смежные вопросы