powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Транспонирование XML файла средствами XSLT
8 сообщений из 8, страница 1 из 1
Транспонирование XML файла средствами XSLT
    #35601934
Имеется XML файл вида
<root>
<element>
<type>A</type>
<value>1</value>
</element>
<element>
<type>B</type>
<value>2</value>
</element>
<element>
<type>C</type>
<value>3</value>
</element>
.......
</root>
Необходимо с помощью XSLT трансформации преобразовать его в SQL инструкцию вида
INSERT INTO <table> VALUES(1,2).
Порядок элементов в XML файле произвольный. Из всех элементов XML файла в SQL инструкцию
попадают, только значения элементов определенного типа, например, вида A и B или к примеру B и C. Элементы, которые должны попасть в SQL 100% процентов есть в XML файле. Значения элементов располагаются в XML инструкции в строго определенном порядке, к примеру, элемент A обязательно первый, а элемент B обязательно второй.

По сути дела задача сводится к транспонированию некоторого заранее заданного подмножества XML файла.

Сам страдал страдал над задачей, но решить ее не удалось. Имеет ли задача решения указанными средствами? И если имеет у кого какие есть идеи по ее решению?
...
Рейтинг: 0 / 0
Транспонирование XML файла средствами XSLT
    #35602051
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маслов Д. А.Имеется XML файл вида
<root>
<element>
<type>A</type>
<value>1</value>
</element>
<element>
<type>B</type>
<value>2</value>
</element>
<element>
<type>C</type>
<value>3</value>
</element>
.......
</root>
Необходимо с помощью XSLT трансформации преобразовать его в SQL инструкцию вида
INSERT INTO <table> VALUES(1,2).
Так и не понял логики преобразования.

Что такое <table> и где оно в исходном XML? Что такое VALUES (1, 2) и почему не 1, 3? Кто и когда определяет эту логику
...
Рейтинг: 0 / 0
Транспонирование XML файла средствами XSLT
    #35602422
Логика определяется на этапе создания XSLT преобразования и в дальнейшем не изменяется.
<table> - фиксированная величина не зависящая от XML файла и задающаяся на этапе создания XSLT преобразования.
Попытаюсь переформулировать задачу:
Имеется XML файл. Содержащий описания объектов типа A,B,C,.... . Файл ежедневно изменяется. Необходимо создать SQL инструкцию вставки в БД значений элементов типа A и C. Таблица БД table1. То есть должна получиться инструкция вида INSERT INTO table1 VALUES(<val1>,<val2>), где <val1>,<val2> - значения тэгов <value></value> для объектов типа A и C соответственно.
...
Рейтинг: 0 / 0
Транспонирование XML файла средствами XSLT
    #35602690
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда в чем проблема? Вот решение для типов А и В
Код: plaintext
1.
2.
3.
4.
5.
<xsl:template match="/root">
  INSERT INTO table VALUES (
  <xsl:value-of select="element[type = 'A']/value"/>,
  <xsl:value-of select="element[type = 'B']/value"/>
  )
</xsl:template>
Форматирование писать было лень. Если нужно специфическое форматирование смотреть в сторону <xsl:text> и функции concat()

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Транспонирование XML файла средствами XSLT
    #35603515
Помогло, огромное спасибо!!!
Ради академического интереса, но не более того. Возможно ли решить эту же задачу с помощью <xslt:if>, <xslt:for-each> и неограниченного числа стилей и подстилей?
...
Рейтинг: 0 / 0
Транспонирование XML файла средствами XSLT
    #35605523
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну например так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<xsl:template match="/root">
  INSERT INTO table VALUES (
  <xsl:apply-templates select="element">
    <xsl:with-param name="type" select="'A'"/>
  <.xsl:apply-templates>,
  <xsl:apply-templates select="element">
    <xsl:with-param name="type" select="'B'"/>
  <.xsl:apply-templates>
  )
</xsl:template>

<xsl:template match="element">
  <xsl:param name="type">
  <xsl:if test="type = $type">
    <xsl:value-of select="value"/>
  </xsl:if>
</xsl:template>
или так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<xsl:template match="/root">
  INSERT INTO table VALUES (
  <xsl:apply-templates select="element[type = 'A']"/>,
  <xsl:apply-templates select="element[type = 'B']"/>,
  )
</xsl:template>

<xsl:template match="element">
  <xsl:value-of select="value"/>
</xsl:template>

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Транспонирование XML файла средствами XSLT
    #35608250
Огромное спасибо! Вы удовлетворили абсолютно все мои практические и академические интересы! :-)
...
Рейтинг: 0 / 0
Транспонирование XML файла средствами XSLT
    #35610551
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С уважением, Vasilisk
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Транспонирование XML файла средствами XSLT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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