Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 5
Регистрация: 01.10.2013
Сообщений: 203
1

Поясните смысл задания. Трансформация xml-данных

14.04.2015, 14:50. Показов 1386. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание расширить программу.Изначально создавался список объектов и этот же список сериализовался в xml-файл. Теперь нужно реализовать возможность обработки структур перед сохранением в файл - трансформация xml-данных согласно правилу(например, замена всех атрибутов тегами). Не могу вникнуть в суть задания, если кто знает, поясните, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2015, 14:50
Ответы с готовыми решениями:

Поясните смысл задания
Доброго времени суток. Есть задание: "Равносильность доказать или опровергнуть, не используя...

Поясните смысл задания плз.
Изучаю программирование на СИ, раздел " Динамические структуры данных ". Встретил в одной методе...

Трансформация XML
Добрый день. У меня есть XML - файл с некоторыми данными из программы. Так же есть 2 xslt файла,...

Поясните смысл записи
Приветствую всех! Есть база данных доски объявлений, в таблице категорий есть столбец с такими...

10
1215 / 806 / 244
Регистрация: 08.08.2014
Сообщений: 2,371
14.04.2015, 15:06 2
Посмотрите общие сведения об XSLT.

От вас, скорее всего, требуется из исходного XML получить XML другой структуры.

Например, заменить все атрибуты на тэги.
XML
1
<element id="10" name="some" descr="some descr" />
XML
1
2
3
4
5
<element>
  <id>10</id>
  <name>some</name>
  <descr>some descr</descr>
</element>
1
2 / 2 / 5
Регистрация: 01.10.2013
Сообщений: 203
14.04.2015, 18:09  [ТС] 3
Цитата Сообщение от kotelok Посмотреть сообщение
Посмотрите общие сведения об XSLT.

От вас, скорее всего, требуется из исходного XML получить XML другой структуры.

Например, заменить все атрибуты на тэги.
XML
1
<element id="10" name="some" descr="some descr" />
XML
1
2
3
4
5
<element>
  <id>10</id>
  <name>some</name>
  <descr>some descr</descr>
</element>
Понятно, а какие ещё могут быть правила помимо замены атрибутов тегами?
0
1215 / 806 / 244
Регистрация: 08.08.2014
Сообщений: 2,371
14.04.2015, 18:41 4
Для XML есть лишь ограничения по синтаксису, структура же конкретного документа и возможные преобразования определяются спецификой решаемой задачи. Соответственно и преобразовывать некий XML можно как угодно - в XML другой структуры, в HTML, в форматированный текстовый файл, в исходники на каком-нибудь языке.

Всё это можно делать либо применяя XSLT, либо кодом программы. Зависит от задачи.
0
2 / 2 / 5
Регистрация: 01.10.2013
Сообщений: 203
14.04.2015, 21:32  [ТС] 5
Цитата Сообщение от kotelok Посмотреть сообщение
Для XML есть лишь ограничения по синтаксису, структура же конкретного документа и возможные преобразования определяются спецификой решаемой задачи. Соответственно и преобразовывать некий XML можно как угодно - в XML другой структуры, в HTML, в форматированный текстовый файл, в исходники на каком-нибудь языке.

Всё это можно делать либо применяя XSLT, либо кодом программы. Зависит от задачи.
Решил начать с замены атрибутов тегами.. Сразу напоролся на проблему: для xslt как я понял нужно писать что-то типо шаблона.. а у меня в xml могут хранится различные объекты, и составлять для каждого шаблон как минимум не рационально. что можете посоветовать? очень слабо знаком с xml, с xslt только сейчас начал разбираться, может там есть именно то, что мне нужно, а именно замена всех атрибутов?
Работаю в среде intellij idea, там в редакторе xml есть XML Refactorings и есть операция Replace Attribute With Tag, она делает именно то, что мне и нужно, но только для выделенного атрибута
0
1215 / 806 / 244
Регистрация: 08.08.2014
Сообщений: 2,371
14.04.2015, 22:00 6
Я плохо знаком с XSLT. Однако, Гугл сходу выдал вот такое решение на stackoverflow.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:element name="{name()}">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>
Проверил на нескольких XML, независимо от структуры, все атрибуты преобразует в элементы.

Только не очень понятно, что именно вам нужно сделать в рамках задания. Может вообще не стоит в XSLT углубляться, всё-таки, это весьма серьёзная тема, возможно будет достаточно сделать запрошенные преобразования просто кодом.
0
2 / 2 / 5
Регистрация: 01.10.2013
Сообщений: 203
14.04.2015, 22:23  [ТС] 7
Цитата Сообщение от kotelok Посмотреть сообщение
Я плохо знаком с XSLT. Однако, Гугл сходу выдал вот такое решение на stackoverflow.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:element name="{name()}">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>
Проверил на нескольких XML, независимо от структуры, все атрибуты преобразует в элементы.

Только не очень понятно, что именно вам нужно сделать в рамках задания. Может вообще не стоит в XSLT углубляться, всё-таки, это весьма серьёзная тема, возможно будет достаточно сделать запрошенные преобразования просто кодом.
Спасибо, уже сам догуглил до этой темы.
У вас всё хорошо с табуляцией в преобразованном xml? у меня преобразованные элементы находятся в начале строки. Вот пример:
Исходный файл:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<WorkersList>
  <workers>
    <WorkersPack.Professions.Programmer>
      <name>Orange</name>
      <age>19</age>
      <skill>2</skill>
      <haveScheme>false</haveScheme>
      <language>Java</language>
      <computer>
        <owner class="WorkersPack.Professions.Programmer" reference="../.."/>
        <name>Asus</name>
      </computer>
    </WorkersPack.Professions.Programmer>
  </workers>
</WorkersList>
Результат:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?><WorkersList>
  <workers>
    <WorkersPack.Professions.Programmer>
      <name>Orange</name>
      <age>19</age>
      <skill>2</skill>
      <haveScheme>false</haveScheme>
      <language>Java</language>
      <computer>
        <owner>
<class>WorkersPack.Professions.Programmer</class>
<reference>../..</reference>
</owner>
        <name>Asus</name>
      </computer>
    </WorkersPack.Professions.Programmer>
  </workers>
</WorkersList>
0
1215 / 806 / 244
Регистрация: 08.08.2014
Сообщений: 2,371
14.04.2015, 22:40 8
Попробуйте так.
Java
1
2
3
4
5
6
7
8
9
10
        Source xslt = new StreamSource(new File("attr_to_tag.xslt"));
        Source src = new StreamSource(new File("src.xml"));
 
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(xslt);
        
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "8");
        
        transformer.transform(src, new StreamResult(new File("dest.xml")));
1
2 / 2 / 5
Регистрация: 01.10.2013
Сообщений: 203
14.04.2015, 22:50  [ТС] 9
Java
1
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "8");
Сменил с 8 на 2, выровнялось как полагается, спасибо
0
1215 / 806 / 244
Регистрация: 08.08.2014
Сообщений: 2,371
14.04.2015, 23:11 10
Я так понимаю, это зависит от количества пробелов (табуляций) в исходном документе. Мне XMLSpy исходный документ отформатировал при помощи табов (один таб на уровень), так что у меня со значением '8' правильные отступы получаются.

Трансформер, похоже, те элементы, которые копируются напрямую, не трогает вовсе, а те, которые формируются в рамках преобразования, двигает в соответствии со значением 'indent-amount'. Так что решение так себе. Если во каком-то входном документе окажется другой размер отступа, придётся менять размер отступа у трансформера.
0
2 / 2 / 5
Регистрация: 01.10.2013
Сообщений: 203
14.04.2015, 23:52  [ТС] 11
Цитата Сообщение от kotelok Посмотреть сообщение
Я так понимаю, это зависит от количества пробелов (табуляций) в исходном документе. Мне XMLSpy исходный документ отформатировал при помощи табов (один таб на уровень), так что у меня со значением '8' правильные отступы получаются.

Трансформер, похоже, те элементы, которые копируются напрямую, не трогает вовсе, а те, которые формируются в рамках преобразования, двигает в соответствии со значением 'indent-amount'. Так что решение так себе. Если во каком-то входном документе окажется другой размер отступа, придётся менять размер отступа у трансформера.
Ага, значит, буду искать решение этого
0
14.04.2015, 23:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2015, 23:52
Помогаю со студенческими работами здесь

Поясните смысл фразы
А что будет выбираться, если &lt;ds:Reference URI=&quot;&quot;&gt;

Трансформация из XML в PDF
Здравствуйте! Помогите, пожалуйста, с заданием: Взять в качестве исходного документа XML документ....

Поясните, пожалуйста, смысл lint
Господа профессионалы, разъясните на примерах что такое lint и как его использовать? Оно входит в...

Трансформация xml файла в INI файл
Здравствуйте. Собственно говоря, дали задание (в названии). Проблема в том, что с этим я совсем не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru