Получение значений атрибутов между двумя числами - PullRequest
2 голосов
/ 26 марта 2012

Я работаю над школьным заданием, и я был полностью озадачен этим шагом.

Мне нужно найти сумму всех элементов, значение атрибута которых находится между двумя числами, в данном случае больше, чем9 и меньше 18. Я потратил час, пробуя различные комбинации и выполняя их работу, я не могу найти ни одного примера в книге, в которой есть это.Может кто-нибудь помочь указать, что я делаю неправильно, или подтолкнуть меня в правильном направлении?

Вот фрагмент XML и XSLT.

<course>
 <par holeNumber="1">4</par>
 <par holeNumber="2">4</par>
 <par holeNumber="3">5</par>
 <par holeNumber="4">3</par>
 <par holeNumber="5">4</par>
 <par holeNumber="6">4</par>
 <par holeNumber="7">5</par>
 <par holeNumber="8">3</par>
 <par holeNumber="9">4</par>
 <par holeNumber="10">4</par>
 <par holeNumber="11">5</par>
 <par holeNumber="12">4</par>
 <par holeNumber="13">3</par>
 <par holeNumber="14">4</par>
 <par holeNumber="15">5</par>
 <par holeNumber="16">4</par>
 <par holeNumber="17">3</par>
 <par holeNumber="18">4</par>
</course>

<xsl:template match="par">
<td><xsl:value-of select="." /></td>
<xsl:choose>
    <xsl:when test="./@holeNumber">
        <td class="sub"><xsl:value-of select="sum(@holeNumber &gt; 9)" /></td>
        <td class="final"></td>" /></td>
        <td class="final"></td>
    </xsl:when>
    <xsl:when test="1">

    </xsl:when>
    <xsl:otherwise>

    </xsl:otherwise>
</xsl:choose>

Ответы [ 2 ]

2 голосов
/ 26 марта 2012
/course/par[@holeNumber <= 18 and 9 <= @holeNumber]

Вы можете использовать это в своем match, или вы можете использовать его только для получения вашей суммы:

sum(/course/par[@holeNumber <= 18 and 9 <= @holeNumber])

ПРИМЕЧАНИЕ. При этом используется <= вместо просто <, чтобы получить как 18, так и 9. Удалите =, если вы не хотите, чтобы они были включены.

1 голос
/ 27 марта 2012

Следующий XSLT при применении к вводу сэмпла дает желаемый результат 32

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

   <xsl:template match="/">
       <xsl:value-of select="sum(course/par[@holeNumber > 9 and @holeNumber &lt; 18])"/>
   </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...