Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / не получается взять значение с родительского узла в цикле (xslt) / 4 сообщений из 4, страница 1 из 1
15.10.2017, 14:18
    #39536465
lucky7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается взять значение с родительского узла в цикле (xslt)
Всем доброго времени суток, прошу помочь, если это возможно, решить задачку по преобразованию. Реальных исходный 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
15.10.2017, 14:50
    #39536476
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не получается взять значение с родительского узла в цикле (xslt)
Код: xml
1.
<td><xsl:value-of select="../flow"/></td>


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

Код: xml
1.
//flow

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

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


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