Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе? / 12 сообщений из 12, страница 1 из 1
18.11.2019, 16:29
    #39890632
ПГС
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
Доброго времени суток, уважаемые.
Не могу решить задачу создание открытых или закрытых элементов по условию.
Само условие не суть как важно. Это отдельный разговор.
Вопрос технике использования конструкций типа
<xsl:element>
( тут что-то )
</xsl:element>
и
<xsl:element (список атрибутов) />
в трансформациях

Через технику XSLT не получается:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<xsl:element name="адрес">
   <xsl:attribute name="дом">
       <xsl:value-of select="10"/>
   </xsl:attribute>
   <xsl:attribute name="квартира"/>
       <xsl:value-of select="15"/>
   </xsl:attribute>
</xsl:element>


т.к. из этого кода получу
Код: xml
1.
2.
<адрес дом="10" квартира="15">
</адрес>


Закрывающий тег в таком случае не нужен.
Мне надо получить такой фрагмент документа:
Код: xml
1.
<адрес дом="10" квартира="15"/>


Т.е. надо получить закрытй элемент с атрибутами.

Подскажите пожалуйста как решить эту задачу?
...
Рейтинг: 0 / 0
18.11.2019, 16:41
    #39890643
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
ПГС
т.к. из этого кода получу
Код: xml
1.
2.
<адрес дом="10" квартира="15">
</адрес>

А я получаю на MSXML 6
Код: xml
1.
<адрес дом="10" квартира="15" />


Ну и кроме того элементы
Код: xml
1.
2.
<адрес дом="10" квартира="15" />
<адрес дом="10" квартира="15"></адрес>

полностью идентичны. А вот откуда у вас появляется перевод строки - нужно смотреть
...
Рейтинг: 0 / 0
18.11.2019, 16:54
    #39890661
ПГС
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
_Vasilisk_

Ну и кроме того элементы
Код: xml
1.
2.
<адрес дом="10" квартира="15" />
<адрес дом="10" квартира="15"></адрес>

полностью идентичны. А вот откуда у вас появляется перевод строки - нужно смотреть

Спасибо за отклик.
Перевод строки не суть, это я руками вбивал код...
Дело в том, что я выложил часть задачи, чтобы не грузить ненужными деталями.
Полный код трансформации преобразует переменный набор пустых и непустых объектов(параметров) которые я должен преобразовать в Элементы и Атрибуты XML документа.

Попросту задача может быть сформулирована так:
Как получить закрытый элемент с набором атрибутов
То, что и открытый пустой и закрытый пустой по сути идентичны я в курсе.

Но заказчик просит не создавать открытый пустой элемент.
Поэтому я ищу способ.
...
Рейтинг: 0 / 0
18.11.2019, 16:59
    #39890669
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
ПГС
Как получить закрытый элемент с набором атрибутов
У меня получается закрытый. Далее либо вопрос к секретному коду, либо к парсеру. Судя по тому, что у вас в элементе появляется перевод строки, проблема таки в коде
...
Рейтинг: 0 / 0
18.11.2019, 17:09
    #39890683
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
дотнетовский XSL-процессор так же выдаёт самозакрытый тэг. Так что озвучьте хотя бы платформу, на которой вы делаете преобразования
ПГС
То, что и открытый пустой и закрытый пустой по сути идентичны я в курсе.

Поскольку они идентичны, то в данном случае формирование разметки выходного дерева - исключительно внутренняя кухня процессора, и даже если она поддаётся настройке, то исключительно какими-нибудь неявными способами, меняющими своё поведение в зависимости от фазы Луны.
_Vasilisk_
Далее либо вопрос к секретному коду, либо к парсеру. Судя по тому, что у вас в элементе появляется перевод строки, проблема таки в коде

У меня, помнится, MSXML какой-то версии на identity transform в подобной ситуации как раз выдавал вместо самозакрытых пару открывающего и закрывающего тэгов. Правда, я с этим не боролся, а оставил, как есть.
...
Рейтинг: 0 / 0
18.11.2019, 17:21
    #39890696
ПГС
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
_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.
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.
<xsl:transform
  xmlns:asx="http://www.sap.com/abapxml"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:prg="http://www.sap.com/abapxml/types/program/{Какая-то программа}"
  version="1.0">
  <xsl:strip-space elements="*"/>

  <xsl:output method="xml" indent="no" omit-xml-declaration="no" version="1.0"/>

  <xsl:template match="/">
    <xsl:for-each select="/asx:abap/asx:values/TABLE/item">

      <xsl:apply-templates select="/asx:abap/asx:heap">
        <xsl:with-param name="pName" select="./NAME"/>
        <xsl:with-param name="pValue" select="./VALUE"/>
        <xsl:with-param name="T_Attrb" select="./T_LIST"/>
        <xsl:with-param name="ChilListID" select="substring(./RF_CHILD/@href,2)"/>
      </xsl:apply-templates>

    </xsl:for-each>

  </xsl:template>

  <xsl:template match="/asx:abap/asx:heap">
    <xsl:param name="pName"/>
    <xsl:param name="pValue"/>
    <xsl:param name="T_Attrb"/>
    <xsl:param name="ChilListID"/>

    <xsl:element name="{$pName}">
      <xsl:variable name="attList" select="$T_Attrb/item[./*]"/>

      <xsl:for-each select="$attList">

        <xsl:variable name="aPos" select="."> </xsl:variable>

        <xsl:attribute name="{$aPos/NAME}">
          <xsl:value-of select="$aPos/VALUE"/>
        </xsl:attribute>

      </xsl:for-each>
      <xsl:value-of select="$pValue"/>

      <xsl:for-each select="prg:TT_ELEMENTS[@id=$ChilListID]/item">

        <xsl:apply-templates select="/asx:abap/asx:heap">
          <xsl:with-param name="pName" select="./NAME"/>
          <xsl:with-param name="pValue" select="./VALUE"/>
          <xsl:with-param name="T_Attrb" select="./T_LIST"/>
          <xsl:with-param name="ChilListID" select="substring(./RF_CHILD/@href,2)"/>
        </xsl:apply-templates>

      </xsl:for-each>


    </xsl:element>

  </xsl:template>

</xsl:transform>




Это ABAP-XSLT не знаю сможете ли вы его протестировать, т.к. входящий поток объектов "сидит" здесь: {asx:values/TABLE/item}.
...
Рейтинг: 0 / 0
18.11.2019, 17:29
    #39890704
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
ПГС,

XML какой-нибудь приложите
...
Рейтинг: 0 / 0
18.11.2019, 17:35
    #39890710
ПГС
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
_Vasilisk_
ПГС,

XML какой-нибудь приложите


На входе не XML
Там параметр в виде дерева объектов в листьях которого лежат ABAP ссылки .... типа указателей на области памяти в C++.
Структура этого дерева произвольна. В зависимости от топологии наполнения листьев в этом дереве, XSLT и должен создать XML документ любого типа.
Прислать ссылки на области в памяти я не могу ;)
...
Рейтинг: 0 / 0
18.11.2019, 17:41
    #39890715
ПГС
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
Вот тут похожая тема. Но не полностью.
Там имена элементов захаркожены, а у меня имена элементов "приезжают" из входного параметра ABAP-XSLT программы.
Я эти имена создаю через <xsl:element>, поэтому этот пример мне не подходит....
...
Рейтинг: 0 / 0
18.11.2019, 17:58
    #39890726
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
ПГС
Там параметр в виде дерева объектов в листьях которого лежат ABAP ссылки .
Я понятия не имею что это такое
ПГС
Прислать ссылки на области в памяти я не могу ;)
Нет. Так нет. Вот для такого 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.
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="1.xsl" ?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml">
  <asx:values>
    <TABLE>
      <item>
        <NAME>T_Name</NAME>
        <VALUE>T_Value</VALUE>
        <T_LIST>
          <item>
            <NAME>T_Name_A1</NAME>
            <VALUE>T_Value_A1</VALUE>
          </item>
          <item>
            <NAME>T_Name_A2</NAME>
            <VALUE>T_Value_A2</VALUE>
          </item>
        </T_LIST>
        <RF_CHILD href="a1"/>
      </item>
    </TABLE>
  </asx:values>
  <asx:heap>
    <prg:TT_ELEMENTS id="1" xmlns:prg="http://www.sap.com/abapxml/types/program">
      <item>
        <NAME>H_Name</NAME>
        <VALUE>H_Value</VALUE>
        <T_LIST>
          <item>
            <NAME>H_Name_A1</NAME>
            <VALUE>H_Value_A1</VALUE>
          </item>
          <item>
            <NAME>H_Name_A2</NAME>
            <VALUE>H_Value_A2</VALUE>
          </item>
        </T_LIST>
        <RF_CHILD href="a_13"/>
      </item>
    </prg:TT_ELEMENTS>
  </asx:heap>
</asx:abap>

получается вот такой выхлоп
Код: xml
1.
<?xml version="1.0" encoding="UTF-16"?><T_Name T_Name_A1="T_Value_A1" T_Name_A2="T_Value_A2">T_Value<H_Name H_Name_A1="H_Value_A1" H_Name_A2="H_Value_A2">H_Value</H_Name></T_Name>

пустых тегов не наблюдаю.
...
Рейтинг: 0 / 0
18.11.2019, 18:05
    #39890730
ПГС
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
_Vasilisk_
пустых тегов не наблюдаю.

Видимо проблема именно в ABAP-XSLT версии, либо есть какая-нибудь опция в шапке XSLT преобразования, о которой я не знаю. :(
...
Рейтинг: 0 / 0
18.11.2019, 18:24
    #39890744
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе?
ПГС
Видимо проблема именно в ABAP-XSLT версии,
Без XML говорить не о чем
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT как создать закртый тег для пустого текстового узла и наличии атрибутов в элементе? / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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