powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / не получается взять значение с родительского узла в цикле (xslt)
4 сообщений из 4, страница 1 из 1
не получается взять значение с родительского узла в цикле (xslt)
    #39536465
lucky7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток, прошу помочь, если это возможно, решить задачку по преобразованию. Реальных исходный XML очень громоздкий, по этому опишу задачу на простом примере. В примере есть несколько элементов "catalog" , в которых есть несколько дочерних элементов "cd", которые в свою очередь так же имеют дочерние элементы. Но на одном уровне с "cd" есть поле "flow".
Задача в том, что бы перебрать все элементы "cd" брать оттуда нужные поля, но так же в каждом шаге цикла ещё доставать элемент "flow" соответствующего каталога ("catalog"). Вот пример исходного XML:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
<?xml version="1.0" encoding="UTF-8"?>
<root>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
  <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
  </cd>
  <cd>
    <title>Greatest Hits</title>
    <artist>Dolly Parton</artist>
    <country>USA</country>
    <company>RCA</company>
    <price>9.90</price>
    <year>1982</year>
  </cd>
  <flow>1</flow>  
</catalog>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
  <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
  </cd>
  <cd>
    <title>Greatest Hits 2</title>
    <artist>Dolly Parton</artist>
    <country>USA</country>
    <company>RCA</company>
    <price>9.90</price>
    <year>19822222</year>
  </cd>
  <flow>2</flow>  
</catalog>
</root>



Вот пример XSLT , который выполнить преобразование и оформит в табличку

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">

  <html>

  <body>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Title</th>
        <th>Artist</th>
        <th>flow</th>
      </tr>
      <xsl:for-each select="root/catalog">
          <xsl:for-each select="cd">
          <tr>
        <td><xsl:value-of select="title"/></td>
        <td><xsl:value-of select="artist"/></td>
        <td><xsl:value-of select="//flow"></td>
         </tr>
          </xsl:for-each>
      </xsl:for-each>
    
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>



Вот такая таблица в итоге получается, но мне нужно, когда формируется строка, в столбце flow было значение из соответствующего родительского элемента catalog. Значение flow это не просто порядковый номер элемента, здесь может быть произвольное значение.



Извиняюсь что наверно очень коряво изложил задачу, но надеюсь понятно что требуется. Несколько дней уже думал как сделать, смотрел примеры но так и не получилось добиться результата. Заранее благодарю за помощь.
...
Рейтинг: 0 / 0
не получается взять значение с родительского узла в цикле (xslt)
    #39536476
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
<td><xsl:value-of select="../flow"/></td>


или
Код: xml
1.
<xsl:value-of select="parent::catalog/flow" />
...
Рейтинг: 0 / 0
не получается взять значение с родительского узла в цикле (xslt)
    #39536480
lucky7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны,
Спасибо большое! как же всё было просто..
...
Рейтинг: 0 / 0
не получается взять значение с родительского узла в цикле (xslt)
    #39536560
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lucky7,

Код: xml
1.
//flow

достать элемент flow на любом уровне вложенности, считая от корня документа. Одна из самых трудозатратных операций
Код: xml
1.
.//flow

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


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