2016-08-26 2 views
0

Я застрял в выражении xPath и как его отобразить в XSLT. Мне бы очень хотелось помочь.Использование xpath и xslt для проверки значений числовых атрибутов элементов sibling

ИСТОЧНИК

Плоский стек элементов "элемент":

<list> 
    <item outline="3" name="grumpy"/> 
    <item outline="5" name="monarchists"/> 
    <item outline="9" name="dispatch"/> 
    <item outline="3" name="parkour"/> 
    <item outline="3" name="elves"/> 
    <item outline="9" name="hunting"/> 
    <item outline="9" name="clueless"/> 
    <item outline="3" name="xPath"/> 
    <item outline="2" name="newbs"/> 
</list> 

ТЕСТ

ли значение "контур" предыдущий элемента атрибута больше, чем значение атрибут «контур» текущего элемента?

Если да, то изменить значение текущего атрибута «элемента» элемента «контур» в 1.

FAILED XPATH

Я не могу пройти мимо первоначального испытания ...

<xsl:when test="preceding::item[1][@outline &gt; @outline]"> 

ХОЧЕТ ВЫХОДА

<list> 
    <item outline="1" name="grumpy"/> 
    <item outline="5" name="monarchists"/> 
    <item outline="9" name="dispatch"/> 
    <item outline="1" name="parkour"/> 
    <item outline="3" name="elves"/> 
    <item outline="9" name="hunting"/> 
    <item outline="9" name="clueless"/> 
    <item outline="1" name="xPath"/> 
    <item outline="1" name="newbs"/> 
</list> 

Пожалуйста, предложите также XSLT.

Спасибо!

+0

Почему изменилось первое значение? –

+0

Первое значение - 1, по умолчанию. Если я получаю false из test = "previous :: item [1]", я добавляю значение 1 к первому элементу. Помимо этого первого пункта, это следует за правилом, нет? –

ответ

0

Использование

<xsl:template match="item[preceding-sibling::item[1]/@outline > @outline]/@outline"> 
    <xsl:attribute name="outline">1</xsl:outline> 
</xsl:template> 

плюс шаблон тождественное преобразование.

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