Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT. Преобразование XML-XML с учетом отношения один-ко-многим. / 25 сообщений из 28, страница 1 из 2
30.05.2019, 11:43
    #39820267
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Добрый день, Коллеги!
Есть экспортированные данные в виде 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.
58.
59.
60.
61.
<?xml version="1.0" standalone="yes"?>
<intermech>
  <art id="item_2">
    <relation id="rel_1" elementtype="form" ref="form_1"/>
    <occurrence id="occ_1" ref="item_3" elementtype="art">
      <relation id="rel_2" elementtype="form" ref="form_2"/>
    </occurrence>
    <occurrence id="occ_2" ref="item_4" elementtype="art">
      <relation id="rel_3" elementtype="form" ref="form_3"/>
    </occurrence>	
  </art>
  <form id="form_1">
    <formattribute id="fa_1" name="НАИМ" value="Комплекс 1" parmtype="techcard"/>
    <formattribute id="fa_2" name="VART_ID" value="102532" parmtype="search"/>
    <formattribute id="fa_3" name="ART_ID" value="29503" parmtype="search"/>
    <formattribute id="fa_4" name="Идентификатор версии объекта" value="1" parmtype="search"/>
    <formattribute id="fa_8" name="Наименование" value="Комплекс 1" parmtype="search"/>
    <formattribute id="fa_15" name="ART_VER_ID" value="1" parmtype="search"/>
    <formattribute id="fa_16" name="ART_ID_1" value="102532" parmtype="search"/>
  </form>
  <form id="form_2">
    <formattribute id="fa_20" name="Идентификатор дочернего объекта" value="5817" parmtype="search"/>
    <formattribute id="fa_21" name="Идентификатор родительского объекта" value="102532" parmtype="search"/>
    <formattribute id="fa_22" name="!MANUAL_LINK" value="1" parmtype="search"/>
    <formattribute id="fa_23" name="!CONTEXT" value="2" parmtype="search"/>
  </form>
  <form id="form_3">
    <formattribute id="fa_25" name="Идентификатор дочернего объекта" value="102601" parmtype="search"/>
    <formattribute id="fa_26" name="Идентификатор родительского объекта" value="102532" parmtype="search"/>
    <formattribute id="fa_27" name="!MANUAL_LINK" value="1" parmtype="search"/>
    <formattribute id="fa_28" name="!CONTEXT" value="2" parmtype="search"/>
  </form>
  <art id="item_3">
    <relation id="rel_4" elementtype="form" ref="form_4"/>
  </art>
  <form id="form_4">
    <formattribute id="fa_29" name="НАИМ" value="Запчасть 1" parmtype="techcard"/>
    <formattribute id="fa_30" name="VART_ID" value="5817" parmtype="search"/>
    <formattribute id="fa_31" name="ART_ID" value="29824" parmtype="search"/>
    <formattribute id="fa_36" name="Обозначение" value="Обозначение 1" parmtype="search"/>
    <formattribute id="fa_37" name="Наименование" value="Запчасть 1" parmtype="search"/>
    <formattribute id="fa_44" name="ART_VER_ID" value="1" parmtype="search"/>
    <formattribute id="fa_45" name="ART_ID_1" value="5817" parmtype="search"/>
    <formattribute id="fa_47" name="!PARENT" value="" parmtype="search"/>
    <formattribute id="fa_48" name="!PARENT_ID" value="29503" parmtype="search"/>
  </form>
  <art id="item_4">
    <relation id="rel_5" elementtype="form" ref="form_5"/>
  </art>
  <form id="form_5">
    <formattribute id="fa_49" name="НАИМ" value="Запчасть 2" parmtype="techcard"/>
    <formattribute id="fa_50" name="VART_ID" value="102601" parmtype="search"/>
    <formattribute id="fa_51" name="ART_ID" value="57599" parmtype="search"/>
    <formattribute id="fa_56" name="Обозначение" value="Обозначение 2" parmtype="search"/>
    <formattribute id="fa_57" name="Наименование" value="Запчасть 2" parmtype="search"/>
    <formattribute id="fa_64" name="ART_VER_ID" value="1" parmtype="search"/>
    <formattribute id="fa_65" name="ART_ID_1" value="102601" parmtype="search"/>
    <formattribute id="fa_67" name="!PARENT" value="" parmtype="search"/>
    <formattribute id="fa_68" name="!PARENT_ID" value="29503" parmtype="search"/>
  </form>
</intermech>



Это древовидный список изделий и их комплектующих. В базе данных связь «один-ко-многим».
Файл этот необходимо преобразовать для дальнейшего использования.
Связи между изделиями и комплектующими задаются тегами <relation> и <occurrence>. В <occurrence> задаётся ссылка на параметры дочернего объекта, а <relation> указывает на «коды» дочернего и родительского объектов.
Немного запутано, но не смертельно =)
С XSL ранее не работал и понятия не имел, что это за зверь такой, однако получилось создать вот такой шаблон:
Код: 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.
58.
59.
60.
61.
62.
63.
64.
65.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version  = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" indent="yes" />

	<xsl:template match = "/">
		<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
			<xsl:apply-templates select="intermech/art"/>
		</data>
	</xsl:template>

	<xsl:template match="relation[@elementtype='form']">
		<xsl:variable name="form_id" select="@ref"/>
		<xsl:for-each select = "../occurence">
			<xsl:variable name="item_id" select="@ref"/>		
			<Incidents1>
				<Identifier>
					<xsl:value-of select="@id"/>
				</Identifier>
				<xsl:apply-templates select="../../form[@id=$form_id]"/>
				<xsl:apply-templates select="../../art[@id=$item_id]"/>
			</Incidents1>
		</xsl:for-each>
	</xsl:template>
	
	
	<xsl:template match="form">
		
		<importID>
			<xsl:value-of select="@id"/>
		</importID>
		
		<vartID>
			<xsl:value-of select="formattribute[@name='VART_ID']/@value"/>
		</vartID>
		
		<partName>
			<xsl:value-of select="formattribute[@name='Наименование']/@value"/>
		</partName>
		
		<xsl:if test="formattribute[@name='Идентификатор родительского объекта']">
			<ParentID>
				<xsl:value-of select="formattribute[@name='Идентификатор родительского объекта']/@value"/>
			</ParentID>
		</xsl:if>
		
		<xsl:if test="formattribute[@name='Идентификатор дочернего объекта']">
			<ChildID>
				<xsl:value-of select="formattribute[@name='Идентификатор дочернего объекта']/@value"/>
			</ChildID>
		</xsl:if>
		
	</xsl:template>

	<xsl:template match="art">
	
		<xsl:variable name="form_id" select="relation/@ref"/>
		<xsl:variable name="child_id" select="occurrence/relation/@ref"/>
		
		<Part>
			<xsl:apply-templates select="../form[@id=$form_id]"/>
			<xsl:apply-templates select="../form[@id=$child_id]"/>
		</Part>
			
	</xsl:template>
</xsl:stylesheet>


В результате получается XML:

Результат получает некорректный т.к. в <Part> с <importID>=form_1 не должно быть тегов <ParentID> и <ChildID>.
Корректный результат будет выглядеть так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<Part>
	<importID>form_1<importID>
	<vartID>102532</vartID>
</Part>
<Part>
	<importID>form_4<importID>
	<ParentID>102532</ParentID>
   	<ChildID>5817</ChildID>
</Part>
<Part>
	<importID>form_5<importID>
	<ParentID>102532</ParentID>
    	<ChildID>102601</ChildID>
</Part>



Архив с файлами во вложении.

Как это сделать не понимаю. Помогите, пожалуйста! =)
...
Рейтинг: 0 / 0
30.05.2019, 15:06
    #39820347
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984Результат получает некорректный т.к. в <Part> с <importID>=form_1 не должно быть тегов <ParentID> и <ChildID>.Их и нет. Они появляются от form_2

Чего вы хотели добиться этим кодом?
Oleg071984
Код: xml
1.
2.
3.
4.
<Part>
  <xsl:apply-templates select="../form[@id=$form_id]"/>
  <xsl:apply-templates select="../form[@id=$child_id]"/>
</Part>

Потому, что по факту получается вот это

Код: 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.
<Part>
   <!--form id="form_1"-->
   <importID>form_1</importID>
   <vartID>102532</vartID>
   <partName>Комплекс 1</partName>
   <!--child_id="form_2"-->
   <importID>form_2</importID>
   <vartID>
   </vartID>
   <partName>
   </partName>
   <ParentID>102532</ParentID>
   <ChildID>5817</ChildID>
   <importID>form_3</importID>
   <vartID>
   </vartID>
   <partName>
   </partName>
   <ParentID>102532</ParentID>
   <ChildID>102601</ChildID>
</Part>
<Part>
   <!--form id="form_4"-->
   <importID>form_4</importID>
   <vartID>5817</vartID>
   <partName>Запчасть 1</partName>
   <!--child_id=""-->
</Part>
<Part>
   <!--form id="form_5"-->
   <importID>form_5</importID>
   <vartID>102601</vartID>
   <partName>Запчасть 2</partName>
   <!--child_id=""-->
</Part>



Ну и вот это
Oleg071984
Код: xml
1.
<xsl:value-of select="formattribute[@name='Наименование']/@value"/>

проще записывать так
Код: xml
1.
<xsl:value-of select="formattribute/@Наименование"/>
...
Рейтинг: 0 / 0
30.05.2019, 15:35
    #39820364
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,

Опыта работы с XSL - 1 день, поэтому могут быть ошибки.
Мне необходимо из form2 и form3 перекинуть тег "Идентификатор родительского объекта" в form4 и form5. Никак не могу понять как это сделать. Получается только все запихнуть в form1.
Другими словами, form1 состоит из form4 и form5, а связь установлена form1.VART_ID > form4(5).Идентификатор родительского объекта.
Как этого добиться в коде?
...
Рейтинг: 0 / 0
30.05.2019, 16:19
    #39820391
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Я так до конца и не понял задачу

Есть набор узлов art
Oleg071984
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
  <art id="item_2">
    <relation id="rel_1" elementtype="form" ref="form_1"/>
    <occurrence id="occ_1" ref="item_3" elementtype="art">
      <relation id="rel_2" elementtype="form" ref="form_2"/>
    </occurrence>
    <occurrence id="occ_2" ref="item_4" elementtype="art">
      <relation id="rel_3" elementtype="form" ref="form_3"/>
    </occurrence>	
  </art>

которые описывают связи между объектам.

Элемент art/relation указывает на основной объект. Элементы art/occurence/relation на дочерние.

Запись
Oleg071984
Код: xml
1.
<relation id="rel_4" elementtype="form" ref="form_4"/>

обозначает, что нужно найти элемент с именем elementtype="form" и id =ref="form_4"

Если все так, то тогда вопрос какие поля нужно достать из главного элемента, а какие из дочерних?
...
Рейтинг: 0 / 0
31.05.2019, 09:53
    #39820586
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,

Да верно.

Вот что должно получиться в итоге. Названия полей файла-источника я закомментил
Код: 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.
<?xml version="1.0"?>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Part>
	<importID>form_1</importID> <!-- form/@id -->
	[color=blue]<vartID>102532</vartID>[/color] <!-- formattribute/@VART_ID -->
	<artID>29503</artID> <!-- formattribute/@ART_ID -->
	<partName>Комплекс 1</partName> <!-- formattribute/@Наименование" -->
	<objectVersion>1</objectVersion> <!-- formattribute[@name='Идентификатор версии объекта'] -->
</Part>
<Part>
	<importID>form_4</importID>
    <vartID>5817</vartID>
	<ParentID>102532</ParentID> <!-- formattribute[@name='Идентификатор родительского объекта'] -->
	<artID>29824</artID>
    <partName>Запчасть 1</partName>
	<objectVersion>1</objectVersion>
</Part>
<Part>
	<importID>form_5</importID>
	<vartID>102601</vartID>
	<ParentID>102532</ParentID>
	<artID>57599</artID>
	<partName>Запчасть 2</partName>
	<objectVersion>1</objectVersion>
</Part>
</data>



Во вложении скрин из программы, в которой используются эти данные.
...
Рейтинг: 0 / 0
31.05.2019, 14:44
    #39820795
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984Вот что должно получиться в итоге.Ответа на вопрос_Vasilisk_какие поля нужно достать из главного элемента, а какие из дочерних?я так и не увидел
...
Рейтинг: 0 / 0
31.05.2019, 15:04
    #39820805
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Поля, которые достаются из главного элемента:
1. "VART_ID"
2. "ART_ID"
3. "Идентификатор версии объекта"
4. "Наименование"

Поля, которые нужно достать из дочерних элементов:
1. "VART_ID"
2. "ART_ID"
3. "Идентификатор версии объекта"
4. "Наименование"
5. "Идентификатор родительского объекта"

Я в прошлом посте написал комменты в коде.
Oleg071984Вот что должно получиться в итоге. Названия полей файла-источника я закомментил
...
Рейтинг: 0 / 0
31.05.2019, 15:33
    #39820829
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984,

И для каждого объекта нужен свой <Part>? Или один <Part> на всю группу?
...
Рейтинг: 0 / 0
31.05.2019, 15:40
    #39820836
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,

Да, совершенно верно.
...
Рейтинг: 0 / 0
31.05.2019, 15:42
    #39820837
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,

Да. Для каждого объекта нужен свой <Part>.
...
Рейтинг: 0 / 0
31.05.2019, 15:43
    #39820838
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984Да, совершенно верно.Что из этого_Vasilisk_для каждого объекта нужен свой <Part>? Или один <Part> на всю группу?верно? Это два противоречащих друг-другу утверждений
...
Рейтинг: 0 / 0
31.05.2019, 15:46
    #39820845
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984_Vasilisk_,

Да. Для каждого объекта нужен свой <Part>.
...
Рейтинг: 0 / 0
31.05.2019, 16:56
    #39820889
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-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.
58.
59.
60.
61.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version  = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" encoding="utf-8" />
  
  <xsl:template match = "/">
    <data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <xsl:apply-templates select="intermech/art"/>
    </data>
  </xsl:template>
  
  <xsl:template match="art">
    <xsl:apply-templates select="relation">
      <xsl:with-param name="is_child" select="0"/>
    </xsl:apply-templates>
    <xsl:apply-templates select="occurrence/relation">
      <xsl:with-param name="is_child" select="1"/>
    </xsl:apply-templates>
  </xsl:template>
  
  <xsl:template match="relation">
    <xsl:param name="is_child"/>
    <xsl:apply-templates select="/intermech/*[
      name() = current()/@elementtype and
      @id = current()/@ref]" mode="items">
      <xsl:with-param name="is_child" select="$is_child"/>
    </xsl:apply-templates>
  </xsl:template>
  
  <xsl:template match="*" mode="items">
    <xsl:param name="is_child"/>
    <Part>
      <importID>
        <xsl:value-of select="@id"/>
      </importID>
      <xsl:apply-templates select="formattribute[@name='VART_ID']" mode="field">
        <xsl:with-param name="elementName" select="'vartID'"/>
      </xsl:apply-templates>
      <xsl:apply-templates select="formattribute[@name='ART_ID']" mode="field">
        <xsl:with-param name="elementName" select="'artID'"/>
      </xsl:apply-templates>
      <xsl:apply-templates select="formattribute[@name='Идентификатор версии объекта']" mode="field">
        <xsl:with-param name="elementName" select="'objectVersion'"/>
      </xsl:apply-templates>
      <xsl:apply-templates select="formattribute[@name='Наименование']" mode="field">
        <xsl:with-param name="elementName" select="'partName'"/>
      </xsl:apply-templates>
      <xsl:if test="$is_child = 1">
        <xsl:apply-templates select="formattribute[@name='Идентификатор родительского объекта']" mode="field">
          <xsl:with-param name="elementName" select="'ParentID'"/>
        </xsl:apply-templates>
      </xsl:if>
    </Part>
  </xsl:template>
  
  <xsl:template match="*" mode="field">
    <xsl:param name="elementName"/>
    <xsl:element name="{$elementName}">
      <xsl:value-of select="@value"/>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

...
Рейтинг: 0 / 0
03.06.2019, 08:47
    #39821466
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,

приветствую!

Попробовал сделать конвертацию на сайте https://www.freeformatter.com/xsl-transformer.html.
Результат вот такой:
Код: 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.
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Part>
      <importID>form_1</importID>
      <vartID>102532</vartID>
      <artID>29503</artID>
      <objectVersion>1</objectVersion>
      <partName>Комплекс 1</partName>
   </Part>
   <Part>
      <importID>form_2</importID>
      <ParentID>102532</ParentID>
   </Part>
   <Part>
      <importID>form_3</importID>
      <ParentID>102532</ParentID>
   </Part>
   <Part>
      <importID>form_4</importID>
      <vartID>5817</vartID>
      <artID>29824</artID>
      <partName>Запчасть 1</partName>
   </Part>
   <Part>
      <importID>form_5</importID>
      <vartID>102601</vartID>
      <artID>57599</artID>
      <partName>Запчасть 2</partName>
   </Part>
</data>



Почему то ParentID нет в form_4 и form_5.
...
Рейтинг: 0 / 0
03.06.2019, 13:58
    #39821667
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984Почему то ParentID нет в form_4 и form_5.Oleg071984
Код: 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.
  <form id="form_4">
    <formattribute id="fa_29" name="НАИМ" value="Запчасть 1" parmtype="techcard"/>
    <formattribute id="fa_30" name="VART_ID" value="5817" parmtype="search"/>
    <formattribute id="fa_31" name="ART_ID" value="29824" parmtype="search"/>
    <formattribute id="fa_36" name="Обозначение" value="Обозначение 1" parmtype="search"/>
    <formattribute id="fa_37" name="Наименование" value="Запчасть 1" parmtype="search"/>
    <formattribute id="fa_44" name="ART_VER_ID" value="1" parmtype="search"/>
    <formattribute id="fa_45" name="ART_ID_1" value="5817" parmtype="search"/>
    <formattribute id="fa_47" name="!PARENT" value="" parmtype="search"/>
    <formattribute id="fa_48" name="!PARENT_ID" value="29503" parmtype="search"/>
  </form>
  <art id="item_4">
    <relation id="rel_5" elementtype="form" ref="form_5"/>
  </art>
  <form id="form_5">
    <formattribute id="fa_49" name="НАИМ" value="Запчасть 2" parmtype="techcard"/>
    <formattribute id="fa_50" name="VART_ID" value="102601" parmtype="search"/>
    <formattribute id="fa_51" name="ART_ID" value="57599" parmtype="search"/>
    <formattribute id="fa_56" name="Обозначение" value="Обозначение 2" parmtype="search"/>
    <formattribute id="fa_57" name="Наименование" value="Запчасть 2" parmtype="search"/>
    <formattribute id="fa_64" name="ART_VER_ID" value="1" parmtype="search"/>
    <formattribute id="fa_65" name="ART_ID_1" value="102601" parmtype="search"/>
    <formattribute id="fa_67" name="!PARENT" value="" parmtype="search"/>
    <formattribute id="fa_68" name="!PARENT_ID" value="29503" parmtype="search"/>
  </form>

Где здесь атрибут
Oleg071984
Код: xml
1.
name="Идентификатор родительского объекта"

?
...
Рейтинг: 0 / 0
03.06.2019, 15:04
    #39821734
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,

Он здесь должен появиться после преобразования.
Я же писал в комментариях.
Берутся эти параметры из form_2 и form_3

Oleg071984
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<Part>
	<importID>form_4</importID>
    <vartID>5817</vartID>
	<ParentID>102532</ParentID> <!-- formattribute[@name='Идентификатор родительского объекта'] -->
	<artID>29824</artID>
    <partName>Запчасть 1</partName>
	<objectVersion>1</objectVersion>
</Part>
...
Рейтинг: 0 / 0
03.06.2019, 15:07
    #39821736
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Покажите, где здесь
Oleg071984
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  <form id="form_4">
    <formattribute id="fa_29" name="НАИМ" value="Запчасть 1" parmtype="techcard"/>
    <formattribute id="fa_30" name="VART_ID" value="5817" parmtype="search"/>
    <formattribute id="fa_31" name="ART_ID" value="29824" parmtype="search"/>
    <formattribute id="fa_36" name="Обозначение" value="Обозначение 1" parmtype="search"/>
    <formattribute id="fa_37" name="Наименование" value="Запчасть 1" parmtype="search"/>
    <formattribute id="fa_44" name="ART_VER_ID" value="1" parmtype="search"/>
    <formattribute id="fa_45" name="ART_ID_1" value="5817" parmtype="search"/>
    <formattribute id="fa_47" name="!PARENT" value="" parmtype="search"/>
    <formattribute id="fa_48" name="!PARENT_ID" value="29503" parmtype="search"/>
  </form>

атрибутOleg071984
Код: xml
1.
<!-- formattribute[@name='Идентификатор родительского объекта'] -->
...
Рейтинг: 0 / 0
03.06.2019, 15:16
    #39821744
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,

В этом фрагменте нет. И...?
...
Рейтинг: 0 / 0
03.06.2019, 15:33
    #39821754
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984В этом фрагменте нет. И...?Если в form_4 нет атрибута 'Идентификатор родительского объекта' то тогда откуда ему взяться в выходном файле? Если значение элемента ParentID должно браться именно из этого атрибута?
...
Рейтинг: 0 / 0
03.06.2019, 15:49
    #39821771
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,
Я думаю, что его можно взять из:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<form id="form_2">
    <formattribute id="fa_20" name="Идентификатор дочернего объекта" value="5817" parmtype="search"/>
    <formattribute id="fa_21" name="Идентификатор родительского объекта" value="102532" parmtype="search"/>
    <formattribute id="fa_22" name="!MANUAL_LINK" value="1" parmtype="search"/>
    <formattribute id="fa_23" name="!CONTEXT" value="2" parmtype="search"/>
  </form>
  <form id="form_3">
    <formattribute id="fa_25" name="Идентификатор дочернего объекта" value="102601" parmtype="search"/>
    <formattribute id="fa_26" name="Идентификатор родительского объекта" value="102532" parmtype="search"/>
    <formattribute id="fa_27" name="!MANUAL_LINK" value="1" parmtype="search"/>
    <formattribute id="fa_28" name="!CONTEXT" value="2" parmtype="search"/>
  </form>
...
Рейтинг: 0 / 0
03.06.2019, 16:03
    #39821790
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984Я думаюВы можете много чего думать. Я мысли читать не умею
Oleg071984его можно взять из:Из какого из восьми атрибутов.

Если хотите нужный результат - внятно сформулируйте требования. И постарайтесь их не менять
...
Рейтинг: 0 / 0
03.06.2019, 16:12
    #39821801
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,

Согласен, могу. Так вот чтобы исключить возможное непонимание я специально привёл конечный результат XML с комментариями. И потом ещё обсудил какие поля откуда брать.
Предлагаю конструктивно подойти к вопросу.
...
Рейтинг: 0 / 0
03.06.2019, 16:44
    #39821836
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984я специально привёл конечный результат XML с комментариямиМой код ему полностью соответствует
...
Рейтинг: 0 / 0
03.06.2019, 17:47
    #39821867
Oleg071984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
_Vasilisk_,
В приведённом мной конечном результате:
1. Значения полей parentID взяты из form2 и form3 и добавлены в form4 и form5 в соответствии с заданным relation и occurence.
2. Form2 и Form3 отсутствуют.

Результат работы Вашего кода не решает проблему.

Вот зачем спорить? Я уверен, что с Вашими навыками в XSL изменения внести 10 минут времени.
...
Рейтинг: 0 / 0
04.06.2019, 14:45
    #39822324
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
Oleg071984Я уверен, что с Вашими навыками в XSL изменения внести 10 минут времени.Да. Если я пойму, что вам нужно. Сейчас я не понимаю. Вообще
Oleg0719842. Form2 и Form3 отсутствуют.Почему они должны отсутствовать?
Oleg071984
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
  <art id="item_2">
    <relation id="rel_1" elementtype="form" ref="form_1"/>
    <occurrence id="occ_1" ref="item_3" elementtype="art">
      <relation id="rel_2" elementtype="form" ref="form_2"/>
    </occurrence>
    <occurrence id="occ_2" ref="item_4" elementtype="art">
      <relation id="rel_3" elementtype="form" ref="form_3"/>
    </occurrence>	
  </art>

Oleg071984Для каждого объекта нужен свой <Part>.
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT. Преобразование XML-XML с учетом отношения один-ко-многим. / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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