Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Dynamic array to XML / 11 сообщений из 11, страница 1 из 1
20.05.2012, 23:51
    #37803119
evolution
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
Всем привет,

есть динамический массив в виде строки:


DYN = "FirstName" : @AM : "Lastname" : @AM : "Address1" : @AM : "Address2" : @AM : "Phones" : @VM : "HomePhone" : @SM : "123456" : @VM : "MobilePhone" : @SM : "654321" : @SM : "0 654321" ....... ? @AM../@VM../@SM..

@AM - field marker
@VM - value marker
@SM - subvalue marker

нужен следующий xml:

<MyCustomer>
<Name>FirstName</Name>
<Surname>Surname</Surname>
<Address1>Address1</Address1>
<Address2>Address2<Address2>
<Phones>
<HomePhone>123456</HomePhone>
<MobilePhone>
<MobilePhone1>654321</MobilePhone1>
<MobilePhone2>0 654321</MobilePhone2>
<MobilePhone>
</Phones>
</MyCustomer>

вот куда я смог дойти (познаний в xsl : new member) :

'<?xml version="1.0" ?>'
'<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">'
'<xsl:template match="/">'
'<mycustomer>'
'<xsl:for-each select="array/data">'

'<xsl:if test="@attribute=1">'
'<firstname>'
'<xsl:value-of select="."/>'
'</firstname>'
'</xsl:if>'

'<xsl:if test="@attribute=2">'
'<lastname>'
'<xsl:value-of select="."/>'
'</lastname>'
'</xsl:if>'

'<xsl:if test="@attribute=3">'
'<address1>'
'<xsl:value-of select="."/>'
'</address1>'
'</xsl:if>'

'<xsl:if test="@attribute=4">'
'<address2>'
'<xsl:value-of select="."/>'
'</address2>'
'</xsl:if>'

.. тут завис ) .

XS := '<xsl:if test="@attribute=4 and value=1">'
XS := '<Phones>'
XS := '<xsl:value-of select="."/>'
XS := '</Phones>'
XS := '</xsl:if>'

XS := '</xsl:for-each>'
XS := '</mycustomer>'
XS := '</xsl:template>'
XS := '</xsl:stylesheet>'

спасибо!
...
Рейтинг: 0 / 0
21.05.2012, 07:39
    #37803204
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
XSL не предназначен для изготовления XML из "массивов в виде строки". XSL предназначен для изготовления одного XML из другого.
...
Рейтинг: 0 / 0
21.05.2012, 11:02
    #37803427
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
evolution,

вероятно вам надо:
Код: xml
1.
<xsl:if test="@attribute=4 and not(.='')">



система, которую вы используете, не стандартна для этого раздела, вам лучше обратится к документации на нее, или к разработчику.
...
Рейтинг: 0 / 0
21.05.2012, 11:22
    #37803477
evolution
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
mage.lanevolution,

вероятно вам надо:
Код: xml
1.
<xsl:if test="@attribute=4 and not(.='')">



система, которую вы используете, не стандартна для этого раздела, вам лучше обратится к документации на нее, или к разработчику.


ок,
так думаю правильнее:

<array>
<data attribute="1" value="1" subvalue="1">...</data>
..
</array>


attribute - @AM
value - @VM
subvalue - @SM

спасибо!
...
Рейтинг: 0 / 0
21.05.2012, 14:25
    #37803899
evolution
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
есть идеи?

подчеркну что структура строки (записи) известна

спасибо!
...
Рейтинг: 0 / 0
21.05.2012, 14:36
    #37803941
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
evolution,

вы XML полностью приведите, не очень понятно, что обрабатывать, и совсем не понятно что такое
attribute="1"
value="1"
subvalue="1"
по поводу первого можно предположить, что это какая-то связь между 1 и Name, 2 и Surname судя по вашему XSL, но value и subvalue - это полная загадка.
...
Рейтинг: 0 / 0
21.05.2012, 14:59
    #37804005
evolution
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
mage.lanevolution,

вы XML полностью приведите, не очень понятно, что обрабатывать, и совсем не понятно что такое
attribute="1"
value="1"
subvalue="1"
по поводу первого можно предположить, что это какая-то связь между 1 и Name, 2 и Surname судя по вашему XSL, но value и subvalue - это полная загадка.

перефразирую:

входной XML :

<?xml version="1.0" encoding="UTF-8"?>
<array>
<data attribute="1" value="1" subvalue="1">FirstName</data>
<data attribute="2" value="1" subvalue="1">LastName</data>
<data attribute="3" value="1" subvalue="1">Address1</data>
<data attribute="4" value="1" subvalue="1">Address2</data>
<data attribute="5" value="1" subvalue="1">Phones</data>
<data attribute="5" value="2" subvalue="1">HomePhone</data>
<data attribute="5" value="2" subvalue="2">123465</data>
<data attribute="5" value="3" subvalue="1">MobilePhone</data>
<data attribute="5" value="3" subvalue="2">654321</data>
<data attribute="5" value="3" subvalue="3">0 654321</data>
</array>

DYN = "FirstName" : @AM : "Lastname" : @AM : "Address1" : @AM : "Address2" : @AM : "Phones" : @VM : "HomePhone" : @SM : "123456" : @VM : "MobilePhone" : @SM : "654321" : @SM : "0 654321"

@AM , @VM и @SM - это разделители (attribute - @AM, value - @VM , subvalue - @SM)

на выходе нужен:

<MyCustomer>
<Name>FirstName</Name>
<Surname>Surname</Surname>
<Address1>Address1</Address1>
<Address2>Address2<Address2>
<Phones>
<HomePhone>123456</HomePhone>
<MobilePhone>
<MobilePhone1>654321</MobilePhone1>
<MobilePhone2>0 654321</MobilePhone2>
</MobilePhone>
</Phones>
</MyCustomer>
...
Рейтинг: 0 / 0
21.05.2012, 15:10
    #37804035
evolution
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
mage.lanevolution,

вы XML полностью приведите, не очень понятно, что обрабатывать, и совсем не понятно что такое
attribute="1"
value="1"
subvalue="1"
по поводу первого можно предположить, что это какая-то связь между 1 и Name, 2 и Surname судя по вашему XSL, но value и subvalue - это полная загадка.

строка , есть dynamic multivalue array. сушествует функция куда можно передать xsl и получить XML на выходе.Если xsl не задан , на выходе получается data/array...

мне нужен xsl который , трансформирует входной формат XML (data/array) в "приведенный формат как пример" на выходе.

Спасибо!
...
Рейтинг: 0 / 0
21.05.2012, 15:26
    #37804081
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
evolutionв "приведенный формат как пример" на выходе.А имена выходных узлов откуда брать?
...
Рейтинг: 0 / 0
21.05.2012, 16:01
    #37804206
evolution
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
_Vasilisk_evolutionв "приведенный формат как пример" на выходе.А имена выходных узлов откуда брать?


я задаю в сам, но в принципе это есть - attribute="1" value="1" subvalue="1"

'<?xml version="1.0" ?>'
'<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">'
'<xsl:template match="/">'
'<mycustomer>'
'<xsl:for-each select="array/data">'

'<xsl:if test="@attribute=1">'
'<firstname>'
'<xsl:value-of select="."/>'
'</firstname>'
'</xsl:if>'

'<xsl:if test="@attribute=2">'
'<lastname>'
'<xsl:value-of select="."/>'
'</lastname>'
'</xsl:if>'
...
Рейтинг: 0 / 0
21.05.2012, 18:45
    #37804611
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Dynamic array to XML
evolution,

как-то так:
Код: xml
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.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template select="/">
	<MyCustomer>
		<xsl:apply-templates select="/array/data[ @attrubute &lt; 5 ]" />
		<Phones>
			<xsl:apply-templates select="/array/data[ @attrubute &gt; 4 and @subvalue=1 ]" />
		</Phones>		
	</MyCustomer>
</xsl:template>
<xsl:template match="data" priority="-1"/>

<xsl:template match="data[@attrubute=1]">
	<Name>
		<xsl:value-of select="text()" />
	</Name>
</xsl:template>
<xsl:template match="data[@attrubute=2]">
	<Surname>
		<xsl:value-of select="text()" />
	</Surname>
</xsl:template>
<xsl:template match="data[@attrubute=3]">
	<Address1>
		<xsl:value-of select="text()" />
	</Address1>
</xsl:template>
<xsl:template match="data[@attrubute=4]">
	<Address2>
		<xsl:value-of select="text()" />
	</Address2>
</xsl:template>
<xsl:template match="data[@attrubute=5 and @subvalue=1]">
	<xsl:element name={text()}>
		<xsl:variable name="set" select="/array/data[ @attrubute=5 and @value=current()/value ]" />
		<xsl:apply-template select="$set" mode="item">
			<xsl:with-param name="simple" select="count($set) = 1" />
			<xsl:with-param name="tag" select="current()/text()" />
		</xsl:apply-template>
	</xsl:element>
</xsl:template>
<xsl:template match="data" mode="item">
	<xsl:param name="simple" />
	<xsl:param name="tag" />
	<xsl:choose>
		<xsl:when test="$simple">
			<xsl:value-of select="text()" />
		</xsl:when>
		<xsl:otherwise>
			<xsl:element name="{concat($tag, position())}">
				<xsl:value-of select="text()" />
			</xsl:element>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Dynamic array to XML / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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