Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите преобразовать не иерархичные данные XML / 25 сообщений из 26, страница 1 из 2
10.10.2010, 19:23
    #36891590
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Привет всем. Ребят, я в XML ну практически вообще никак. Писал как-то преобразование через XSL, но там задача была проще.

В общем, есть XML файл, созданный при помощи экспорта из Adobe Acrobat, каждая страница представлена вот таким кодом:
Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
- <Story>
  <Kolontitul>Автомобили с крано-манипуляторными установками</Kolontitul> 
  </Story>
- <Story>
  <Zagolovok>КАМАЗ- 53228  БОРТОВОЙ с КМУ АMCO VEBA</Zagolovok> 
  </Story>
- <Figure>
  <ImageData src="images/1.Краны-манипуляторы_img_68.jpg" /> 
  </Figure>
- <Figure>
  <ImageData src="images/1.Краны-манипуляторы_img_69.jpg" /> 
  </Figure>
- <Figure>
  <ImageData src="images/1.Краны-манипуляторы_img_70.jpg" /> 
  </Figure>
- <Story>
- <TABLE_TEXT>
- <Table>
- <TR>
- <TD>
  <Table_top>Автомобиль бортовой с КМУ Amco Veba</Table_top> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>КМУ</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT>Amco Veba  823 -4S</TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Грузоподъемность на максимальном вылете, кг</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 1460 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Максимальный вылет стрелы, м</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 12 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Грузовой момент, т*м</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 20 , 40 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
  <TD /> 
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Базовое шасси</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT>КАМАЗ- 53228 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Модель автомобиля по ОТТС</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT>2784KE</TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Габаритные размеры автомобиля, мм:</TABLE_TEXT> 
  </TD>
  <TD /> 
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>- длина</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 9400 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>- ширина</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 2540 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>- высота</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 3600 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>База автомобиля, мм</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 4100  /  1320 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Колесная формула автомобиля</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT>6х6</TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Снаряженная масса, кг</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 12000 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Полная масса, кг</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 24500 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Масса перевозимого груза, кг</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 12350 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Внутренние размеры платформы, мм:</TABLE_TEXT> 
  </TD>
  <TD /> 
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>- длина</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 5900 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>- ширина</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 2470 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>- высота</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 580 </TABLE_TEXT> 
  </TD>
  </TR>
- <TR>
- <TD>
  <TABLE_TEXT>Погрузочная высота, мм</TABLE_TEXT> 
  </TD>
- <TD>
  <TABLE_TEXT> 1500 </TABLE_TEXT> 
  </TD>
  </TR>
  </Table>
  </TABLE_TEXT>
  </Story>
- <Story>
  <_No_paragraph_style_>Автомобиль оборудован бортовой 
платформой и крано-манипуляторной установкой Amco Veba и имеет возможность
 не только проводить грузоподъемные работы, но и перевозить 
грузы в условиях бездорожья. На шасси КАМАЗ- 53228  можно устанавливать краны серий
 «Стандарт» и «T» с грузовым моментом от  1  до  25 , 1  т*м.</_No_paragraph_style_> 
  <_No_paragraph_style_>Из серии «Стандарт» возможно
 установить КМУ моделей  103  3S и от  702  1S до  825  2S.</_No_paragraph_style_> 
  <_No_paragraph_style_>Из серии «Т» возможно установить 
КМУ моделей от 601T 1S до 817T 4S.</_No_paragraph_style_> 
  <_No_paragraph_style_>С характеристиками 
КМУ и навесным оборудованием к ним можно ознакомиться на страницах 
каталога  73 - 74  и на сайте www.amcoveba.ru.</_No_paragraph_style_> 
  <_No_paragraph_style_>Подробную информацию
 обо всей продукции можно найти на сайте www.chaika-service.ru.</_No_paragraph_style_> 
  </Story>

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

Какая у меня цель в идеале: получить файл (типа CSV), в котором будут колонки: название (Zagolovok), ссылки на картинки, таблица характеристик и описание. 4 колонки в итоге.

Как это возможно сделать? Как дать понять преобразователю, что страница закончилась и началась новая?

Помогите пожалуйста, кто чем может.
...
Рейтинг: 0 / 0
10.10.2010, 21:13
    #36891656
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Anton Klyauzov,

PDF покажите, в приложенном вами XML гораздо больше информации, чем вы привели в примере.

например это и есть ваша пагинация:
Код: plaintext
1.
2.
<Story>
  <Kolontitul>Автомобили с крано-манипуляторными установками</Kolontitul> 
</Story>
...
Рейтинг: 0 / 0
10.10.2010, 21:20
    #36891658
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
да, еще, как вы себе представляете разметку в CSV?

Текст, Список картинок (разделитель какой?), таблица (тегами?), описание там тоже таблицы. параграфы, не параграфы, детально не смотрел, но куча лабуды...

разделенные запятыми значения как то не выходят, куда потом транспортить будем, Excel?
...
Рейтинг: 0 / 0
10.10.2010, 21:51
    #36891678
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
CSV для загрузки в Virtuemart (он-лайн каталог в Joomla), в качестве ограничителей полей используются символы "~" (тильда), разделители ";" (точка с запятой).

Список картинок - отдельными колонками. Типа additional_images.
Таблица - html тэгами, она там в принципе почти в таком виде и присутствует.
Описание - вполне допустимо использование простого текста.

Для того чтобы нормально разбирать страницу, пытался добавить во все страницы новый тэг.
К примеру, пробовал заменить <story><kolontitul> на </page><page><story><kolontitul>
и потом убрать лишние включения.
Результата пока нет.

PDF мог бы показать, но он весит 52.6 мегабайт в архиве. Если это не пугает, выкладываю
...
Рейтинг: 0 / 0
11.10.2010, 00:45
    #36891756
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Anton Klyauzov Если это не пугает
не пугает. меня страницы 8-11 из PDF смутили, так понимаю их можно проигнорировать и добавить либо руками, либо еще как, а начиная с 12й уже все более менее единообразно идет.

Ща придумаем.
...
Рейтинг: 0 / 0
11.10.2010, 03:18
    #36891791
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Кури, че непонятно, спросишь.

формат:
~Заголовок~КартинкаКартинка~ТаблицаТаблица~<P>Текст</P><P>Текст</P>;

если, как ты говоришь, с xsl общался, то формат сам переколбасиш, как тебе будет удобно.

Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:x="adobe:ns:meta/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:stMfs="http://ns.adobe.com/xap/1.0/sType/ManifestItem#">
	<xsl:variable name="set" select="/TaggedPDF-doc/Document/Article/*" />
	<xsl:template match="/">
		<xsl:text disable-output-escaping="yes"><![CDATA[<PLAINTEXT>]]></xsl:text>
		<xsl:apply-templates select="TaggedPDF-doc/Document/Article/Story[Zagolovok]" mode="header" />
	</xsl:template>
	<xsl:template match="Story" mode="header">
		<xsl:variable name="start" select="count(preceding-sibling::*)" />
		<xsl:variable name="finish" select="count(following-sibling::Story[Zagolovok or Kolontitul][1]/preceding-sibling::*)" />

		<xsl:text>~</xsl:text>
		<xsl:value-of select="Zagolovok/text()" />
		<xsl:text>~</xsl:text>
		<xsl:apply-templates select="$set[name()='Figure' and position() > $start and position() <= $finish ]" />
		<xsl:text>~</xsl:text>
		<xsl:apply-templates select="TABLE_TEXT/Table" mode="table" />
		<xsl:apply-templates select="$set[name()='Story' and Table_top/Table and position() > $start and position() <= $finish ]/Table_top/Table" mode="table" />
		<xsl:text>~</xsl:text>
		<xsl:apply-templates select="*[not(Table or Zagolovok)]" mode="parse" />
		<xsl:apply-templates select="$set[name()='Story' and position() > $start and position() <= $finish ]" mode="parse" />
<xsl:text xml:space="preserve">;
</xsl:text>
	</xsl:template>
	<xsl:template match="Figure">
		<xsl:element name="IMG">
			<xsl:attribute name="SRC">
				<xsl:value-of select="ImageData/@src" />
			</xsl:attribute>
		</xsl:element>
	</xsl:template>
	<xsl:template match="Table|TR[not(TD[Table_top])]" mode="table">
		<xsl:copy>
			<xsl:copy-of select="@*" />
			<xsl:apply-templates mode="table" />
		</xsl:copy>
	</xsl:template>
	<xsl:template match="TD|TR[TD[Table_top]]" mode="table">
		<xsl:choose>
			<xsl:when test=".//Table_top">
				<xsl:element name="CAPTION">
					<xsl:apply-templates select=".//Table_top/node()" mode="table" />
				</xsl:element>
			</xsl:when>
			<xsl:otherwise>
				<xsl:copy>
					<xsl:copy-of select="@*" />
					<xsl:apply-templates select="TABLE_TEXT/node()" mode="table" />
				</xsl:copy>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<xsl:template match="text()" mode="table">
		<xsl:value-of select="." />
	</xsl:template>
	<xsl:template match="Zagolovok|Kolontitul|Table" mode="parse" />
	<xsl:template match="*" mode="parse" priority="-1">
		<xsl:apply-templates mode="parse"/>
	</xsl:template>
	<xsl:template match="text()" mode="parse">
		<xsl:element name="P">
			<xsl:value-of select="." />
		</xsl:element>
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
11.10.2010, 03:22
    #36891793
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
угловые скобки в xPath строках < и > в исходнике были &lt; и &gt; форум слопал.
...
Рейтинг: 0 / 0
11.10.2010, 09:36
    #36891899
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Спасибо за код. Только я не вкурил, где скобки заменились. Судя по ошибкам при открытии XSL - я поменял в эти строках:
Код: plaintext
<xsl:apply-templates select="$set[name()='Figure' and position() > $start and position() <= $finish ]" />

< на lt, > на gt.

Результат на выходе - обработалось две страницы. Т.е. до самих автомобилей дело не дошло.
...
Рейтинг: 0 / 0
11.10.2010, 09:39
    #36891901
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Пожалуйста приложи файл аттачем, чтобы код не съелся, если не сложно.
Спасибо.
...
Рейтинг: 0 / 0
11.10.2010, 15:42
    #36892871
Andry Trushin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
...
...
Рейтинг: 0 / 0
11.10.2010, 16:08
    #36892930
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Спасибо вам ребята, теперь я понял, почему не работало, так как я ожидал. Сам дурак.
...
Рейтинг: 0 / 0
11.10.2010, 22:41
    #36893628
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Я безмерно вам благодарен за выложенный код, реально всё работает.

Натолкнулся на такую сложность: ввиду того, что импорт дополнительных картинок для товаров в Virtuemart (виртуальный каталог на Joomla) нужно делать через специальный шаблон , получается, что нужно два CSV файла.

Один - список товаров с основными полями
код товара (product_sku), основная картинка товара (product_image), описание товара (product_desc), ну, и так далее.

А вторым CSV-файлом идут дополнения для загруженного списка товаров.
и там тоже присутствуют коды товара и файлы, к нему относящиеся.

Рождается такая задача: так как в исходном XML нет явно выраженного типа нумерации товаров (страниц в моем случае) то придется использовать некий счетчик, который будет присваивать каждой строке идентификатор товара. Счетчик должен иметь возможность задания начального значения, так как XML файлов будет несколько, а нумерация в базе сквозная.
При формировании первого вывода через XSL для каждого товара должна остаться одна картинка, первая. Остальные картинки (их может быть несколько, а может не быть вообще) нужно получить отдельным списком, где каждая картинка будет на новой строке и будет соответствовать коду товара присвоенному счетчиком в первом проходе.

Как-то так.

Может, как-то путано объясняю, но вроде всё разжевал. Если это возможно сделать, и не очень сложно - помогите пожалуйста доработать до ума предложенный XSL.

P.S. Я кстати, ошибся, и разделителями полей является символ ^
Я поправил ваш файл, чтобы разделение по полям (^) и ограничение (~) располагалось так, как нужно в итоге.
Также, от картинки нужно только название файла. Это в XSL тоже исправил.

Единственное, что не понял - как убрать в конце каждой страницы:
"Полный список крано-манипуляторных установок Amco Veba (этот текст может меняться) вы можете увидеть на сайте www.amcoveba.ru (этот текст может меняться) "
...
Рейтинг: 0 / 0
11.10.2010, 23:33
    #36893682
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Я нашел функцию, которая позволяет заменять одну строку - другой, но там нужно только точное соответствие.
...
Рейтинг: 0 / 0
11.10.2010, 23:47
    #36893692
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Anton Klyauzov,

а про картинки ведь был один из первых вопросов

ай-ди - тащу из РДФ метаданных, по идее он должен быть уникальным, не устроит переопределите docID или закините сверху, как параметр трансформеру.

текст с сылкой на сайт(в конце страницы) - разный, я там показал для 2х сайтов как отловить,если не боитесь, можно порезать все строки с 'www.', это уже на ваше усмотрение или добавляете сайты, определив их просмотром исходных пдф.


когда воткнете все это в цмс - сравните таблицы, есть у меня кое-какие сомнения там. пдф их крайне криво строит, вероятно прийдется за ним колспаны раставлять
...
Рейтинг: 0 / 0
12.10.2010, 09:18
    #36893901
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
mage.lan ,

Да, всё отлично, спасибо. Колспаны действительно нужно будет добавлять - при экспорте они не учлись, и были созданы пустые TD
...
Рейтинг: 0 / 0
12.10.2010, 23:20
    #36895935
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
mage.lan,

Идентификатор в RDF оказался одинаковый для всех 7ми файлов XML полученных из 7ми файлов PDF. Отсюда вопрос - чтобы использовать один шаблон XSL, не переписывая ID - можно ли как-то вытянуть в переменную название XML файла, к которому шаблон привязан?

И по поводу колспана - автоматизировать это возможно? К примеру, если в строке <TR> есть пустое <td></td>, то нужно посчитать количество TD в строке, убрать пустые и оставшийся TD поменять на TH с colspan, равном изначальному количеству TD?
...
Рейтинг: 0 / 0
13.10.2010, 01:38
    #36896014
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Anton Klyauzov,

там еще инстанс-айди был, может он отличается.
не знаю, чем ты трансформишь, ежели эксплорером, просто допиши что-нить в рутовую ноду и вычитай как ид. если взрослым трансформером - закинь сверху параметр.

с таблицами побороться можно, но там надо малек подумать, нахрапом не выйдет. а думать я сенни не могу, бошка как улей, завтра на работе может чего соображу.
...
Рейтинг: 0 / 0
13.10.2010, 09:28
    #36896229
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
mage.lan,

Да, трансформирую эксплорером, потому что он переносы строк в preserve нормально понимает, в отличии от мозиллы. А специально трансформер ставить я что-то не стал.

Инстанс - да, разный, но его почему-то не удалось зацепить. В общем, поменяю в исходном файле руками.
...
Рейтинг: 0 / 0
13.10.2010, 18:19
    #36897873
Andry Trushin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Anton Klyauzov,

все темплейты у кого указан mode="table" меняешь на
Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
    <xsl:template name="calc-cols">
        <xsl:param name="row" />
        <xsl:param name="cols" />

        <xsl:variable name="c">
            <xsl:choose>
                <xsl:when test="count( $row/TD ) > $cols">
                    <xsl:value-of select="count( $row/TD )" />
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="$cols" />
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:choose>
            <xsl:when test="$row/following-sibling::TR">
              <xsl:call-template name="calc-cols">
                  <xsl:with-param name="row" select="$row/following-sibling::TR[position()=1]" />
                  <xsl:with-param name="cols" select="$c" />
              </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$c" />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="Table" mode="table">
        <xsl:variable name="cols">
            <xsl:call-template name="calc-cols">
                <xsl:with-param name="row" select="TR[position()=1]" />
                <xsl:with-param name="cols" select="0" />
            </xsl:call-template>
        </xsl:variable>
        <xsl:copy>
            <xsl:apply-templates select="TR" mode="table">
                <xsl:with-param name="cols" select="$cols" />
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="TR" mode="table">
        <xsl:param name="cols" />
        <xsl:copy xml:space="preserve">
            <xsl:apply-templates select="TD" mode="table">
                <xsl:with-param name="cols" select="$cols" />
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="TD" mode="table">
        <xsl:param name="cols" />
        <xsl:copy>
              <xsl:if test="position() = last() and position() != $cols">
                  <xsl:attribute name="COLSPAN">
                      <xsl:value-of select="$cols + 1 - position()" />
                  </xsl:attribute>
              </xsl:if>
              <xsl:apply-templates mode="table" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="TABLE_TEXT|Table_top" mode="table">
        <xsl:value-of select="text()" />
    </xsl:template>
...
Рейтинг: 0 / 0
14.10.2010, 09:39
    #36898554
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Andry Trushin,

Каждый по отдельности? Или все с mode=table скопом на этот код?

Если заменяю каждый отдельно - получаю ошибку что cols не может быть определен несколько раз.
Если меняю все скопом - то ни одна таблица в выводе не присутствует.
...
Рейтинг: 0 / 0
14.10.2010, 10:18
    #36898635
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Понял, в чем дело, у меня несколько файлов XML, и в них видимо таблицы оформлены по-разному.
Соответственно, трансформер не всё обрабатывает.
...
Рейтинг: 0 / 0
14.10.2010, 10:32
    #36898672
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Ссылка на файл со всеми XML и XSL, который я сейчас использую: http://ifolder.ru/19756000

К сообщению не приложился, потому что весит 200кб (ограничение - 150)
...
Рейтинг: 0 / 0
14.10.2010, 13:33
    #36899250
Andry Trushin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Anton Klyauzov,

инстанс ай-ди вычитал.
вызов таблиц поправил.

там есть еще драконы, например, с "ГАЗ-3307/09 БОРТОВОЙ" из cabin.xml (первое, что попалось под руку) таблица генерится криво изначально.

поправить конечно можно, но это уже ресурсоемко, надо смотреть все таблицы, смотреть исходники, думать алгоритм... руками в цмс править думаю займет такое же время.
...
Рейтинг: 0 / 0
15.10.2010, 08:29
    #36900642
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Andry Trushin,

Спасибо большое.
...
Рейтинг: 0 / 0
29.10.2010, 13:28
    #36927742
Anton Klyauzov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите преобразовать не иерархичные данные XML
Никак не могу добиться - пробую по аналогии с вашим кодом:
нужно добавить во второй вывод (там где только список дополнительных картинок) еще и название товара (Zagolovok)

Скопировал туда часть кода из первого вывода
Код: plaintext
<xsl:value-of select="normalize-space(Zagolovok/text())" />
- не помогло. Этот код ничего не выводит. Что я не так сделал?
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите преобразовать не иерархичные данные XML / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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