powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT цикл
14 сообщений из 14, страница 1 из 1
XSLT цикл
    #39477387
serejka_zloy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер.

Есть xml (приблизительно):
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<root>
<root1>
</root1>
...
<subroot1>text</subroot1>
...
<subroot1>text2</subroot1>
...
<root2>
<subroot2>
{info}
</subroot2>
<subroot2>
{info2}
</subroot2>
</root2>
...
</root>



Если словами. Есть данные о (человеке) в subroot2, и в данном примере, у нас 2 человека с разной информацией
И так же есть доп.часть к этим людям, ну пусть будет, место проживание (город), но так же в разделе root1 есть помимо этого еще другая информация.

Есть xslt, попробую тоже на пальцах показать:

начинаем цикл:
<xsl:for-each select="/root/root2">
<xsl:value-of select = "/subroot"> // получаем например фамилию человека
<xsl:value-of select = "../root1/subroot1"> // ВОПРОС: как получить 2-е значение, а не два раза первое?
</xsl:for-each>

Т.е у меня получается чепуха: фамилию выводит разную, а subroot1 - одно и тоже значение
...
Рейтинг: 0 / 0
XSLT цикл
    #39477389
serejka_zloy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
</root1> закрывается после <subroot1>...
...
Рейтинг: 0 / 0
XSLT цикл
    #39477753
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
<xsl:variable name="pos" select="position()"/>
<xsl:value-of select = "../root1/subroot1[$pos]">
...
Рейтинг: 0 / 0
XSLT цикл
    #39478019
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор<xsl:value-of select = "/subroot"> // получаем например фамилию человекаИ что, это работает? Запрос, начинающийся со слеша, идет к корню, а корень это root, а не subroot.
...
Рейтинг: 0 / 0
XSLT цикл
    #39554704
sqlbeginer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot sqlbeginer]Друзья,
тоже при помощи xslt нужно переделать вот что
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<lst>
  <rec>
    <clmn>b11</clmn>
    <clmn>b12</clmn>
    ....
    <clmn>b1n</clmn>
  </rec>
  <rec>
    <clmn>b21</clmn>
    <clmn>b22</clmn>
    ....
    <clmn>b2n</clmn>
  </rec>
</lst> 



в
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<lst>
  <field rec="1" clmn="1">b11</field >
  <field rec="1" clmn="2">b12</field >
  ...
  <field rec="1" clmn="n">b1n</field >
  <field rec="2" clmn="1">b21</field >
  <field rec="2" clmn="2">b22</field >
  ...
  <field rec="2" clmn="n">b2n</field >
</lst> 


Помогите пожалуйста, а то тоже for each не спасает
...
Рейтинг: 0 / 0
XSLT цикл
    #39554951
sqlbeginer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<xsl:element name = "lst">
			<xsl:for-each select="lst/rec/clmn"> 
				<xsl:element name = "field"> 
					<xsl:attribute name = "rec" >
						<xsl:value-of select="position()"/>
					</xsl:attribute>
					<xsl:attribute name = "clmn">
						<xsl:value-of select="position()"/>
					</xsl:attribute>  
					<xsl:value-of select="."/>                   
				</xsl:element>
			</xsl:for-each>
		</xsl:element> 
	</xsl:template>
</xsl:stylesheet>'


даёт такой результат:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<lst>
	<field rec="1" clmn="1">b11</field>
	<field rec="1" clmn="1">b12</field>
	<field rec="1" clmn="1">b13</field>
	<field rec="1" clmn="1">b14</field>
	<field rec="1" clmn="1">b21</field>
	<field rec="1" clmn="1">b22</field>
	<field rec="1" clmn="1">b23</field>
	<field rec="1" clmn="1">b24</field>
</lst>



а если так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<xsl:element name = "lst">
			<xsl:for-each select="lst/rec"> 
				<xsl:element name = "field"> 
					<xsl:attribute name = "rec" >
						<xsl:value-of select="position()"/>
					</xsl:attribute>
					<xsl:for-each select="rec/clmn"> 
						<xsl:attribute name = "clmn">
							<xsl:value-of select="position()"/>
						</xsl:attribute>  
						<xsl:value-of select="."/>                   
					</xsl:for-each>
				</xsl:element>
			</xsl:for-each>
		</xsl:element> 
	</xsl:template>
</xsl:stylesheet>


то вообще
Код: xml
1.
2.
3.
4.
<lst>
 <field rec="1"></field>
 <field rec="2"></field>
</lst>
...
Рейтинг: 0 / 0
XSLT цикл
    #39555121
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:template match="/lst">
  <lst>
    <xsl:for-each select="rec">
      <xsl:variable name="rec" select="position()"/>
      <xsl:for-each select="clmn">
        <field rec="{$rec}" clmn="{position()}">
          <xsl:value-of select="."/>
        </field>
      </xsl:for-each>
    </xsl:for-each>
  </lst>
</xsl:template>
...
Рейтинг: 0 / 0
XSLT цикл
    #39555136
sqlbeginer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

То же самое, что и первый мой вариант, без номеров строк и колонок.
...
Рейтинг: 0 / 0
XSLT цикл
    #39555167
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqlbeginerТо же самое, что и первый мой вариант, без номеров строк и колонок.Обманываете. Я проверял.

Входной файл
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<lst>
  <rec>
    <clmn>b11</clmn>
    <clmn>b12</clmn>
    <clmn>b1n</clmn>
  </rec>
  <rec>
    <clmn>b21</clmn>
    <clmn>b22</clmn>
    <clmn>b2n</clmn>
  </rec>
</lst> 

выходной файл
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="utf-8"?>
<lst>
  <field rec="1" clmn="1">b11</field>
  <field rec="1" clmn="2">b12</field>
  <field rec="1" clmn="3">b1n</field>
  <field rec="2" clmn="1">b21</field>
  <field rec="2" clmn="2">b22</field>
  <field rec="2" clmn="3">b2n</field>
</lst>
...
Рейтинг: 0 / 0
XSLT цикл
    #39555190
sqlbeginer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

обманывать- нет. Возможно, pl/sql deveolper не понимат:
Код: plsql
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.
SELECT  
  XMLTransform(
                (select xmlelement("lst",
                              xmlconcat(xmlelement("rec",
                                                   xmlconcat(xmlelement("clmn", 'b11'),
                                                             xmlelement("clmn", 'b12'),
                                                             xmlelement("clmn", 'b1n'))),
                                        xmlelement("rec",
                                                   xmlconcat(xmlelement("clmn", 'b21'),
                                                             xmlelement("clmn", 'b22'),
                                                             xmlelement("clmn", 'b2n'))))) xml
              from dual),
   XMLType(
'<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/lst">
  <lst>
    <xsl:for-each select="rec">
      <xsl:variable name="rec" select="position()"/>
      <xsl:for-each select="clmn">
        <field rec="{$rec}" clmn="{position()}">
          <xsl:value-of select="."/>
        </field>
      </xsl:for-each>
    </xsl:for-each>
  </lst>
</xsl:template>
</xsl:stylesheet>'))from dual
...
Рейтинг: 0 / 0
XSLT цикл
    #39555192
sqlbeginer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и впрямь
похоже, зависит от версии БД
...
Рейтинг: 0 / 0
XSLT цикл
    #39555216
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqlbeginerВозможно, pl/sql deveolper не понимат:Oracle 12c - полет нормальный
...
Рейтинг: 0 / 0
XSLT цикл
    #39556208
sqlbeginer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Спасибо, добрый человек.
Привет пивденному вокзалу :)
У меня глюк на 11.2.0.3.0. Хотя, возможно, он и не связан с версией БД.
Может ещё подскажете как избавиться от лишней пустой строки в самом начале результата?
...
Рейтинг: 0 / 0
XSLT цикл
    #39556776
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sqlbeginerМожет ещё подскажете как избавиться от лишней пустой строки в самом начале результата?Добавить
Код: xml
1.
<xsl:output method="xml"/>
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT цикл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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