powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Dynamic array to XML
11 сообщений из 11, страница 1 из 1
Dynamic array to XML
    #37803119
evolution
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,

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


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
Dynamic array to XML
    #37803204
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XSL не предназначен для изготовления XML из "массивов в виде строки". XSL предназначен для изготовления одного XML из другого.
...
Рейтинг: 0 / 0
Dynamic array to XML
    #37803427
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evolution,

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



система, которую вы используете, не стандартна для этого раздела, вам лучше обратится к документации на нее, или к разработчику.
...
Рейтинг: 0 / 0
Dynamic array to XML
    #37803477
evolution
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Dynamic array to XML
    #37803899
evolution
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть идеи?

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

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

вы XML полностью приведите, не очень понятно, что обрабатывать, и совсем не понятно что такое
attribute="1"
value="1"
subvalue="1"
по поводу первого можно предположить, что это какая-то связь между 1 и Name, 2 и Surname судя по вашему XSL, но value и subvalue - это полная загадка.
...
Рейтинг: 0 / 0
Dynamic array to XML
    #37804005
evolution
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Dynamic array to XML
    #37804035
evolution
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Dynamic array to XML
    #37804081
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evolutionв "приведенный формат как пример" на выходе.А имена выходных узлов откуда брать?
...
Рейтинг: 0 / 0
Dynamic array to XML
    #37804206
evolution
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_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
Dynamic array to XML
    #37804611
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
11 сообщений из 11, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Dynamic array to XML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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