powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Преобразовать XML к другому виду
14 сообщений из 14, страница 1 из 1
Преобразовать XML к другому виду
    #34004493
Andr777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскаджите пожалуйста как из фала:
Код: plaintext
1.
2.
3.
<elem1 attr1="attr1" attr2="attr2">
   <elem2 attr1="attr1" attr2="attr2" />
   <elem3 attr1="attr1" attr2="attr2" />
</elem1>
сделать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<elem1 attr1="attr1" attr2="attr2">
   <elem2>
       <attr1>"attr1"</<attr1>
       <attr2>"attr2"</<attr2>
   </elem2>
   <elem3>
       <attr1>"attr1"</<attr1>
       <attr2>"attr2"</<attr2>
   </elem3>       
</elem1>

Если есть желательно пример, как можно выполнить преобразование не используя MSXML.
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34005611
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это транформация привязана к конкретному xml

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no" />

<xsl:template match="//elem1">
<xsl:element name="elem1">
<xsl:attribute name="attr1">attr1</xsl:attribute >
<xsl:attribute name="attr2">attr2</xsl:attribute >
<xsl:for-each select="//elem1/node()">
<xsl:element name="{name()}">
<xsl:element name="attr1">"attr1"</xsl:element >
<xsl:element name="attr2">"attr2"</xsl:element >
</xsl:element >
</xsl:for-each >
</xsl:element >
</xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34006163
Andry777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Идею понял.
А как получить название аттрибута?
Идея в том, что-бы представить все аттрибуты в виде элементов. и равернуть начальный файл от корня.
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34007178
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
функция name()
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34010464
Andry777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
michael Rэто транформация привязана к конкретному xml

<xsl:element name="{name()}">


MS парсер говорит, что элемент должен иметь коректное имя.

В спецификации говорится, что name() может использоваться в конструкции
<xsl:when test="name()='elem1' />

можно ли написать универсальную схему, которая преобразует исходный файл с атрибутами к виду атрибуты в виде элементов?
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34010636
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит, что-то у тебя не так. У меня всё пашет.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
вход:
<root yo="yotext">text</root>

стиль:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
 <xsl:element name="{name()}">
  <xsl:apply-templates select="@*"/>
 </xsl:element>
</xsl:template>
<xsl:template match="@*">
 <xsl:element name="{name()}">
  <xsl:value-of select="."/>
 </xsl:element>
</xsl:template>
</xsl:stylesheet>

выход:
<root><yo>yotext</yo></root>
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34010656
Andry777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot maXmo]значит, что-то у тебя не так. У меня всё пашет.[src html]вход:
quot]
Спасибо за ответ Действительно работает. Буду разбираться.
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34010778
Andry777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoзначит, что-то у тебя не так. У меня всё пашет.

Не работает в конструкции
Код: plaintext
1.
<xsl:for-each select="//elem1/node()">
<xsl:element name="{name()}">
Ошибка:
XSL Err: To create nodes of type 'ELEMENT', a valid name must be specified.
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34010802
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пральна, не все ноды имеют имя.
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34010818
Andry777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoпральна, не все ноды имеют имя.
Для особо одаренных :-) <elem2> - это не имя ноды?
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34010839
Andry777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для особо одаренных
Это я себя имел ввиду... :-)
Параллельно возник вопрос у меня Root нода имеет свой NameSpace
после трансформации файл выглядит
Код: plaintext
1.
<ROOT>
<elem1 xmlns="mynamespace" />
Как от этого избавиться?
Заголовок схемы:
Код: plaintext
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" 
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:my="mynamespace" 
	exclude-result-prefixes="#default my" >
	<xsl:output method="xml" />
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34010860
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, имя ноды не может содержать символы < и >
раз особо одарённым теперь всё понятно, танкисты могут почитать, какие ноды какими именами обладают: http://www.w3.org/TR/xpath#section-Text-Nodes
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34010872
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме элементов и атрибутов есть ещё куча других типов нод.
...
Рейтинг: 0 / 0
Преобразовать XML к другому виду
    #34011003
Andry777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmo
Спасибо большое!
Вот решение моей задачи. Все аттрибуты преобразуются в элементы и NameSpace удаляются.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="WINDOWS-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="WINDOWS-1251" indent="yes"/>
    <xsl:template match="*">
      <!-- remove element prefix (if any) -->
      <xsl:element name="{local-name()}">
        <!-- process attributes -->
        <xsl:for-each select="@*">         
          <xsl:element name="{local-name()}">
            <xsl:value-of select="."/>
          </xsl:element>
        </xsl:for-each>
        <xsl:apply-templates/>
      </xsl:element>
  </xsl:template>
</xsl:stylesheet>
Вот оригинал
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Преобразовать XML к другому виду
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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