powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML to CSV
8 сообщений из 8, страница 1 из 1
XML to CSV
    #37527602
LIfeIsGoodMF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Пересмотрел всю ветку но исчерпывающего ответа для себя так и не нашел.
С XSLT никогда не работал. Может вопрос и глупый но все же, не судите строго.

Вопрос: Возможно ли, в принципе, без потерь преобразовать произвольный XML в CSV? Причем так, что бы из полученного CSV обратным преобразованием можно было получить исходный XML.

И если да, есть ли какие то наработки по этому вопросу?
Спасибо.
...
Рейтинг: 0 / 0
XML to CSV
    #37527702
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно ли, в принципе, без потерь преобразовать произвольный XML в CSV?
csv это плоская таблица, а xml это древовидная структура. В принципе преобразовать произвольный xml можно без потерь в таблицу такого вида:
Number - порядковый номер
ParentNumber - порядковый номер родителя
Type - тип узла (узел, атрибут, текст, cdata, комментарий, процессинговая инструкция)
Text - текст узла

Причем так, что бы из полученного CSV обратным преобразованием можно было получить исходный XML.Обратное преобразование по очевидным причинам невозможно на xsl.
...
Рейтинг: 0 / 0
XML to CSV
    #37527865
LIfeIsGoodMF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy В принципе преобразовать произвольный xml можно без потерь в таблицу такого вида:
Number - порядковый номер
ParentNumber - порядковый номер родителя
Type - тип узла (узел, атрибут, текст, cdata, комментарий, процессинговая инструкция)
Text - текст узла


то что вы предложили по большему счету и есть дерево.

AntonariyОбратное преобразование по очевидным причинам невозможно на xsl.
Имелось ввиду не посредством XSL, а в принципе.


Я же хочу получить что-то на подобии этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="UTF-8"?>
<recipes>
   <recipe name="хлеб" preptime="5" cooktime="180">
      <title>Простой хлеб</title>
      <ingredient amount="3" unit="стакан">Мука</ingredient>
      <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
   </recipe>
</recipes>

recipe@name recipe@preptime recipe@cooktime recipe:title recipe:ingredient@amount recipe:ingredient@unit recipe:ingredient recipe:ingredient_2@amount ...хлеб 5 180 Простой хлеб 3 стакан Мука 0.25 ...
...
Рейтинг: 0 / 0
XML to CSV
    #37527939
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так в чем проблема? Получите на здоровье.
...
Рейтинг: 0 / 0
XML to CSV
    #37527972
LIfeIsGoodMF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OK :). Тогда другой вопрос. Насколько сложно реализовать такое посредством XSLT, учитывая тот факт что XML произвольный и для правильного формирования таблицы мне для начала нужно узнать максимальное значение атрибутов для каждого тега и максимальное количество вложены тегов для каждого тега?
...
Рейтинг: 0 / 0
XML to CSV
    #37527985
LIfeIsGoodMF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или не начинать учить XSLT, а сделать все программно, тем более для обратного преобразования все равно придется делать.
Просто хочется сделать теоретически/логически правильно, а не как обычно. Для принятия таких решений опыта, честно говоря, маловато.
...
Рейтинг: 0 / 0
XML to CSV
    #37528232
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LIfeIsGoodMFНасколько сложно реализовать такое посредством XSLT
Не сложнее чем любое другое.

LIfeIsGoodMF учитывая тот факт что XML произвольный
Таблица, которую предложил я, может хранить любое дерево, и это дерево можно превратить в соответствующий xml даже не видя образца ожидаемого xml.

В вашем примере никакой произвольности нет, и без образца и csv и xml процедур трансформации не напишешь. Поэтому определитесь, что вам все-таки нужно, универсальность или что-то типа вашего примера.

LIfeIsGoodMFтем более для обратного преобразования все равно придется делатьА кстати и обратно можно частично на xsl в зависимости от используемых вами технологий. Например в adodb можно открыть csv как набор данных и пересохранить в xml, на который можно натравить xsl.
...
Рейтинг: 0 / 0
XML to CSV
    #37530562
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LIfeIsGoodMF,

вот вам ради примера разбор заголовков для CSV на XSL.
а дальше думайте, хотите ли вы учить XSL до такого уровня, или проще DOM расковырять (это кстати не менее правильный путь)

Код: plaintext
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.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8" indent="no" />
<xsl:template match="/">
	<xsl:apply-templates select="recipes/*" mode="title" />
</xsl:template>
<xsl:template match="*" mode="title">
	<xsl:param name="prefix" select="''" />
	<xsl:variable name="name">
		<xsl:variable name="_n" select="name()" />
		<xsl:variable name="n" select="preceding-sibling::*[name()=$_n]" />
		<xsl:choose>
			<xsl:when test="$n">
				<xsl:value-of select="concat( $_n, '_', count( $n ) + 1 )" />
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="$_n" />
			</xsl:otherwise>
		</xsl:choose>
	</xsl:variable>
	<xsl:for-each  select="@*">
		<xsl:value-of select="concat($prefix, $name, '@', name())" />
		<xsl:text>;</xsl:text>
	</xsl:for-each>
	<xsl:choose>
		<xsl:when test="normalize-space(text()) != ''">
			<xsl:value-of select="concat($prefix, $name)" />
			<xsl:text>;</xsl:text>
		</xsl:when>
		<xsl:when test="node()">
			<xsl:apply-templates select="node()" mode="title">
				<xsl:with-param name="prefix" select="concat( $prefix, $name, ':' )" />
			</xsl:apply-templates>
		</xsl:when>
	</xsl:choose>
</xsl:template>
<xsl:template match="text()" mode="title" />
</xsl:stylesheet>
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML to CSV
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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