powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Добавить атрибуты в ХМL при помощи XSLT
7 сообщений из 7, страница 1 из 1
Добавить атрибуты в ХМL при помощи XSLT
    #35174703
mrkorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть выгрузка в XML
например
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<root>
     <node1>
         <atr1>
         </atr1>
         <atr2>
         </atr2>
     </node1>
     <node2>
         <atr1>
         </atr1>
         <atr2>
         </atr2>
     </node2>
</root>

нужно в узел <node2> добавить атрибут <atr3/>
<node1> и <node2> разные типы, но атрибуты называются одинаково

Как добавить этот атрибут с помощью XSLT преобразования?
...
Рейтинг: 0 / 0
Добавить атрибуты в ХМL при помощи XSLT
    #35174949
mrkorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее не атрибут, а дочерний узел
сорри, за неточность
...
Рейтинг: 0 / 0
Добавить атрибуты в ХМL при помощи XSLT
    #35176968
Юлий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На глаз приблизительно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<xsl:for-each select="*">
 <xsl:if test="./*">
  <xsl:copy-of select="*"/>
 </xsl:if>
 <xsl:if test="not(./*)">
 <xsl:attribute name="name()" value="."/>
 </xsl:if>
</xsl:for-each>

Гарантии не даю.
...
Рейтинг: 0 / 0
Добавить атрибуты в ХМL при помощи XSLT
    #35179143
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предыдущий ответ вообще полная лажа.
мой правда тоже не ахти какой, но покрайней мера работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:template match="/">
  <xsl:apply-templates mode="node"/>
</xsl:template>
 <xsl:template match="node1" mode="node">
   <xsl:copy-of select="."/>
 </xsl:template>
 <xsl:template match="node2" mode="node">
   <node2>
    <xsl:copy-of select="node()"/>
    <atr3/>
  </node2>
 </xsl:template>
а так смотри первую забитую тему , район примеров, а там кури оси
...
Рейтинг: 0 / 0
Добавить атрибуты в ХМL при помощи XSLT
    #35182207
mrkorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, буду смотреть
...
Рейтинг: 0 / 0
Добавить атрибуты в ХМL при помощи XSLT
    #35191755
Юлий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый SuSa ваш вариант сделает следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<root>
     <node1>
         <atr1>
         </atr1>
         <atr2>
         </atr2>
     </node1>
    <node2>
      <node2>
           <atr1>
           </atr1>
           <atr2>
           </atr2>
           <atr3/>
       </node2>
   </node2>
</root>
Мой же сделает то что требовал автор, если правда исправить * на //* в внешнем for-each :)
Код: plaintext
1.
2.
3.
4.
<root>
     <node1 atr1="" atr2="">
    <node2 atr1="" atr2="">   
</root>

Так что попрошу вас удерживатся от высказываний таких как "лажа".
...
Рейтинг: 0 / 0
Добавить атрибуты в ХМL при помощи XSLT
    #35194118
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно оно работает. Но у меня почему то кроме ошибок и чистого листа после их исправления ничего не выводит.
выводимые ошибки:
1. Attribute 'value' is invalid on 'xsl:attribute'. (Ну и так понятно что написано)
2. This name may not contain the '(' character: name-->(<--) - (это он ругнулся на вот это:
name="name()" у xsl:attribute, типа скобки нельзя)
При их исправлении на экране чистый лист.
Каким парсером парсишь?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Добавить атрибуты в ХМL при помощи XSLT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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