Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT цикл / 14 сообщений из 14, страница 1 из 1
26.06.2017, 00:15
    #39477387
serejka_zloy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
Добрый вечер.

Есть 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
26.06.2017, 00:17
    #39477389
serejka_zloy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
</root1> закрывается после <subroot1>...
...
Рейтинг: 0 / 0
26.06.2017, 14:46
    #39477753
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
Код: xml
1.
2.
<xsl:variable name="pos" select="position()"/>
<xsl:value-of select = "../root1/subroot1[$pos]">
...
Рейтинг: 0 / 0
26.06.2017, 22:10
    #39478019
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
автор<xsl:value-of select = "/subroot"> // получаем например фамилию человекаИ что, это работает? Запрос, начинающийся со слеша, идет к корню, а корень это root, а не subroot.
...
Рейтинг: 0 / 0
16.11.2017, 22:06
    #39554704
sqlbeginer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
[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
17.11.2017, 11:34
    #39554951
sqlbeginer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
Код: 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
17.11.2017, 15:03
    #39555121
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
Код: 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
17.11.2017, 15:20
    #39555136
sqlbeginer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
_Vasilisk_,

То же самое, что и первый мой вариант, без номеров строк и колонок.
...
Рейтинг: 0 / 0
17.11.2017, 15:51
    #39555167
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
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
17.11.2017, 16:11
    #39555190
sqlbeginer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
_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
17.11.2017, 16:13
    #39555192
sqlbeginer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
и впрямь
похоже, зависит от версии БД
...
Рейтинг: 0 / 0
17.11.2017, 16:43
    #39555216
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
sqlbeginerВозможно, pl/sql deveolper не понимат:Oracle 12c - полет нормальный
...
Рейтинг: 0 / 0
20.11.2017, 14:54
    #39556208
sqlbeginer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT цикл
_Vasilisk_,

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


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