Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / XSL преобразование / 2 сообщений из 2, страница 1 из 1
01.02.2017, 16:21
    #39396488
Borisk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSL преобразование
Добрый день. Стоит задача преобразовать XML из одной структуры в другую. Вроде бы простейшее преобразование (объединение нескольких полей в одно), но, т.к. плохо знаю XSL, уже сломал всю голову...
Может, кто подскажет? Спасибо.

Исходный XML:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<Dictionary>
  <Dict>
    <NAIM>BAHAMAS</NAIM>
    <KODT11>1</KODT11>
    <KODT12>2</KODT12>
    <KODT13>3</KODT13>
    <KODT14>4</KODT14>
    <NUMBEGDOC>555</NUMBEGDOC>
  </DictStran>
</DictionaryDictStran>


Что надо получить:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<Dictionary>
  <Dict>
    <NAIM>BAHAMAS</NAIM>
    <KODT>1234</KODT>
    <NUMBEGDOC>555</NUMBEGDOC>
  </DictStran>
</DictionaryDictStran> 



Что удалось придумать (но это не то - match не ищет по маске "KODT"...):
Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:strip-space elements="*"/>
 <xsl:output method="xml" indent="yes"/>
 <xsl:template match="/">
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="Dictionary">
  <xsl:copy>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>
 <xsl:template match="Dict">
  <xsl:copy>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>
  <xsl:template match="NAIM">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="KODT">
    <KODT>
      <xsl:apply-templates/>
    </KODT>
  </xsl:template>
  <xsl:template match="NUMBEGDOC">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
07.02.2017, 19:20
    #39400404
WebSharper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSL преобразование
Borisk,

Это поправить соотвествие маски ( проверить )
Код: 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.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:strip-space elements="*"/>
 <xsl:output method="xml" indent="yes"/>
 <xsl:template match="/">
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="Dictionary">
  <xsl:copy>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>
 <xsl:template match="Dict">
  <xsl:copy>
   <xsl:apply-templates/>
  </xsl:copy>
 </xsl:template>
  <xsl:template match="NAIM">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="*[starts-with(name(.), 'KODT')]">
    <KODT>
      <xsl:apply-templates/>
    </KODT>
  </xsl:template>
  <xsl:template match="NUMBEGDOC">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>



Но тогда он нагенерирует KODT для каждого значения
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / XSL преобразование / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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