Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Автоматическое создание переменных и условий / 7 сообщений из 7, страница 1 из 1
01.02.2012, 21:30
    #37642846
Demonicq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое создание переменных и условий
Есть несколько XML файлов и есть несколько иходных файлов в которых есть элементы с одинаковым содержимым все это обрабатывается одним файлом xsl. Нужно сравнивать содержимое элемента Termin в файлах 1.xml и 2.xml и с содержимым того же элемента Termin только в файлах s1, s1-1 и в зависимости от сравнения то есть если в файле 1.xml и в одном из файлов s1 или s1-1 есть одинаковые термины то получать содержимое элемента Termin и вывести его на экран то есть в браузер в html страницу если нет то ничо не выводить. Сервер не использую, весь вывод осуществляется на клиенте.

Файл 1.xml

Выглядит он следующим образом:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type='text/xsl' href='1.xsl'?>
<Root>

  <Statya>
    <Termin>Сайт</Termin>
  </Statya>

  <Statya>
    <Termin>CMS</Termin>
  </Statya>

</Root>



Файл 2.xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type='text/xsl' href='1.xsl'?>
<Root>

  <Statya>
    <Termin>Интернет маркетинг</Termin>
  </Statya>

</Root>



Файл s1.xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="new.xsl" ?>
<Root>
<Section>Системы управления содержимым</Section>

<Ssilka name="s1" />

<TerminInSection>
<Termin>Сайт</Termin>
</TerminInSection>

<TerminInSection>
<Termin>СMS</Termin>
</TerminInSection>

</Root>



Файл s1-1.xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="new.xsl" ?>
<Root>
<Section>Всемирная паутина</Section>

<Ssilka name="s1-1" />

<TerminInSection>
<Termin>Интернет</Termin>
</TerminInSection>

<TerminInSection>
<Termin>Интернет маркетинг</Termin>
</TerminInSection>

</Root>



Должно в результате выводиться на экран так открываю файл 1.xml и на экране отображается.

Сайт

Системы управления содержимым

CMS

Системы управления содержимым

Открываю файл 2.xml на экране должно отображаться

Интернет


Интернет маркетинг

Всемирная паутина

Сейчас обрабатываю я это примерно так

Код: 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.
<xsl:variable name="ref0">
<xsl:for-each select="document('s1.xml')//DescriptorInSection/Descriptor">
<xsl:value-of select="."/>
</xsl:for-each>
		</xsl:variable>
		
		<xsl:variable name="ref1">
<xsl:for-each select="document('s1-1.xml')//DescriptorInSection/Descriptor">
<xsl:value-of select="."/>
</xsl:for-each>
		</xsl:variable>

<xsl:variable name="refs2">
              <xsl:value-of select="/Tezaurus/Article[position()=$i]/Descriptor" />
		</xsl:variable>
		
				<xsl:variable name="refs">
				<xsl:choose>
			<xsl:when test="contains($refs0, $refs2)">
				<xsl:value-of select="document('s1.xml')//Section"/>
			</xsl:when>
			<xsl:when test="contains($refs1, $refs2)">
				<xsl:value-of select="document('s1-1.xml')//Section"/>
			</xsl:when>
				 <xsl:otherwise>
				 </xsl:otherwise>
	                                   </xsl:choose>
				</xsl:variable>

                                     <xsl:variable name="refx">
				<xsl:choose>
			<xsl:when test="contains($refs0, $refs2)">
				s1.xml
			</xsl:when>
			<xsl:when test="contains($refs1, $refs2)">
				s1-1.xml
			</xsl:when>
				 <xsl:otherwise>
				 </xsl:otherwise>
	                                   </xsl:choose>
			</xsl:variable>

<a href="{$refx}">
<xsl:value-of select="$refs"/>
</a>



Это работает.

Но проблема в том что при создании нового файла s1-2 допустим приходится создавать новую переменную в xslt и писать для неё условие а также указывать имя файла в функции document а мне нужно сделать так чтобы не приходилось вносить изменения в шаблон при каждом создании нового файла чтоб не приходилось создавать новые переменные и условия для них. Как это можно сделать на xslt?
...
Рейтинг: 0 / 0
01.02.2012, 21:46
    #37642862
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое создание переменных и условий
Demonicq, Как Вы собираетесь обращаться к файлам не зная их имен?
...
Рейтинг: 0 / 0
01.02.2012, 21:52
    #37642866
Demonicq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое создание переменных и условий
DemonicqЕсть несколько XML файлов и есть несколько иходных файлов в которых есть элементы с одинаковым содержимым все это обрабатывается одним файлом xsl. Нужно сравнивать содержимое элемента Termin в файлах 1.xml и 2.xml и с содержимым того же элемента Termin только в файлах s1, s1-1 и в зависимости от сравнения то есть если в файле 1.xml и в одном из файлов s1 или s1-1 есть одинаковые термины то получать содержимое элемента Termin и вывести его на экран то есть в браузер в html страницу если нет то ничо не выводить. Сервер не использую, весь вывод осуществляется на клиенте.

Файл 1.xml

Выглядит он следующим образом:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type='text/xsl' href='1.xsl'?>
<Root>

  <Statya>
    <Termin>Сайт</Termin>
  </Statya>

  <Statya>
    <Termin>CMS</Termin>
  </Statya>

</Root>



Файл 2.xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type='text/xsl' href='1.xsl'?>
<Root>

  <Statya>
    <Termin>Интернет маркетинг</Termin>
  </Statya>

</Root>



Файл s1.xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="new.xsl" ?>
<Root>
<Section>Системы управления содержимым</Section>

<Ssilka name="s1" />

<TerminInSection>
<Termin>Сайт</Termin>
</TerminInSection>

<TerminInSection>
<Termin>СMS</Termin>
</TerminInSection>

</Root>



Файл s1-1.xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="new.xsl" ?>
<Root>
<Section>Всемирная паутина</Section>

<Ssilka name="s1-1" />

<TerminInSection>
<Termin>Интернет</Termin>
</TerminInSection>

<TerminInSection>
<Termin>Интернет маркетинг</Termin>
</TerminInSection>

</Root>



Должно в результате выводиться на экран так открываю файл 1.xml и на экране отображается.

Сайт

Системы управления содержимым

CMS

Системы управления содержимым

Открываю файл 2.xml на экране должно отображаться

Интернет


Интернет маркетинг

Всемирная паутина

Сейчас обрабатываю я это примерно так

Код: 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.
<xsl:variable name="ref0">
<xsl:for-each select="document('s1.xml')//TerminInSection/Termin">
<xsl:value-of select="."/>
</xsl:for-each>
		</xsl:variable>
		
		<xsl:variable name="ref1">
<xsl:for-each select="document('s1-1.xml')//TerminInSection/Termin">
<xsl:value-of select="."/>
</xsl:for-each>
		</xsl:variable>

<xsl:variable name="refs2">
              <xsl:value-of select="/Root/Statya[position()=$i]/Termin" />
		</xsl:variable>
		
				<xsl:variable name="refs">
				<xsl:choose>
			<xsl:when test="contains($refs0, $refs2)">
				<xsl:value-of select="document('s1.xml')//Section"/>
			</xsl:when>
			<xsl:when test="contains($refs1, $refs2)">
				<xsl:value-of select="document('s1-1.xml')//Section"/>
			</xsl:when>
				 <xsl:otherwise>
				 </xsl:otherwise>
	                                   </xsl:choose>
				</xsl:variable>

                                     <xsl:variable name="refx">
				<xsl:choose>
			<xsl:when test="contains($refs0, $refs2)">
				s1.xml
			</xsl:when>
			<xsl:when test="contains($refs1, $refs2)">
				s1-1.xml
			</xsl:when>
				 <xsl:otherwise>
				 </xsl:otherwise>
	                                   </xsl:choose>
			</xsl:variable>

<a href="{$refx}">
<xsl:value-of select="$refs"/>
</a>



Это работает.

Но проблема в том что при создании нового файла s1-2 допустим приходится создавать новую переменную в xslt и писать для неё условие а также указывать имя файла в функции document а мне нужно сделать так чтобы не приходилось вносить изменения в шаблон при каждом создании нового файла чтоб не приходилось создавать новые переменные и условия для них. Как это можно сделать на xslt?
...
Рейтинг: 0 / 0
01.02.2012, 22:00
    #37642874
Demonicq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое создание переменных и условий
_Vasilisk_Demonicq, Как Вы собираетесь обращаться к файлам не зная их имен?

Так и собираюсь по атрибуту name элемента Ssilka файлов s1.xml и s1-1.xml который нужно получать из этих файлов.

Ну или генерировать эти имена в самом xslt.
...
Рейтинг: 0 / 0
02.02.2012, 00:20
    #37643011
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое создание переменных и условий
Код: xml
1.
<xsl:value-of select="document($name)//Section"/>
...
Рейтинг: 0 / 0
02.02.2012, 13:36
    #37643771
Demonicq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое создание переменных и условий
_Vasilisk_
Код: xml
1.
<xsl:value-of select="document($name)//Section"/>



Проблема в том что такая запись не работает в IE. Как сделать чтобы работала?

То есть если в функции document пишу $name не работает, если пишу 's1.xml' работает а мне нужно именно переменную или атрибут подставить.
...
Рейтинг: 0 / 0
04.02.2012, 02:44
    #37646784
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое создание переменных и условий
DemonicqПроблема в том что такая запись не работает в IEИ, что, даже сообщение об ошибке есть?
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Автоматическое создание переменных и условий / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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