powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xpath: вычитание атрибутов
6 сообщений из 6, страница 1 из 1
xpath: вычитание атрибутов
    #35758923
Добрый день.

Только начал заниматься Xpath. И тут, вроде не очень стандартное задание.Нужно сформировать xpath запрос, для вычисления разности значения двух значений атрибутов одного элемента. И нахождениия второго результата.

Есть xml, нужно найти имя второго автора жившего больше 80 лет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0" ?>
<authors>
  <author born="1802" died="1885">
    <name idd="VH">Victor Hugo</name>
    <nationality>French</nationality>
  </author>
  <author  born="-496" died="-406" period="classical">
    <name idd="SO">Sophocles</name>
    <nationality>Greek</nationality>
  </author>
  <author born="1828" died="1910">
    <name idd="LT">Leo Tolstoy</name>
    <nationality>Russian</nationality>
  </author>
  <author born="1799" died="1837">
    <name idd="AP">Alexander Pushkin</name>
    <nationality>Russian</nationality>
  </author>
  <author  born="-427" died="-347" period="classical">
    <name idd="PL">Plato</name>
    <nationality>Greek</nationality>
  </author>
</authors>

Пробовал так:
Код: plaintext
/authors/author[((@died - @born)> 80 )+ 2 ] /name/text()


Скажите это верная экспрессия?
...
Рейтинг: 0 / 0
xpath: вычитание атрибутов
    #35759332
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет. неверная.
Выражение ни к чему не приведет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="authors">
        <xsl:for-each select="author">
<!-- Что то типа этого, но если тестить получишь NaN, строку в числа переводить надо-->
            <razinca><xsl:value-of select="author[@died]-author[@born]"/></razinca>
            <xsl:if test="(author[@died] - author[@born]) >80">
                <name><xsl:value-of select="name/text()"/></name>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
xpath: вычитание атрибутов
    #35759751
SuSa,

а как это можно предствить в виде Xpath выражения?
...
Рейтинг: 0 / 0
xpath: вычитание атрибутов
    #35760080
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
/authors/author[(number(attribute::died)-number(attribute::born)>= 80 ) and position()= 2 ]
...
Рейтинг: 0 / 0
xpath: вычитание атрибутов
    #35760380
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или даже так
Код: plaintext
/authors/author[(number(@died) - number(@born) &gt;=  80 ) and position()= 2 ]
...
Рейтинг: 0 / 0
xpath: вычитание атрибутов
    #35761709
_Vasilisk_,

Спасибо!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xpath: вычитание атрибутов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]