powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / работа с двумя наборами узлов
5 сообщений из 5, страница 1 из 1
работа с двумя наборами узлов
    #34471519
Короче вопрос: можно ли в
XSL работать с двумя деревьями одновременно
в переменную или куда занести часть дерева, а потом с ним работать
Вот пример кода
<?xml version="1.0" encoding="windows-1251" ?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:set="http://exslt.org/sets"
extension-element-prefixes="exsl"
exclude-result-prefixes="set"
>
<xsl:import href="set.distinct.xsl" />
<xsl:decimal-format decimal-separator="." grouping-separator=' '/>
<xsl:output method="html" media-type="text/html; charset=windows-1251" encoding="windows-1251"/>
<xsl:template match="/">
<xsl:variable name="day" select="syst/train/vagon/@*[position()=4]"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<title>Справка</title>
</head>
<body>
<xsl:value-of select="$day"/>
<table border="1">
<tr>
<xsl:call-template name="set:distinct">
<xsl:with-param name="nodes" select="syst/train/vagon/@*[position()=6]"/>
</xsl:call-template>
</tr>

<xsl:call-template name="set:distinct">
<xsl:with-param name="nodes" select="syst/train/vagon/@*[position()=4]"/>
<xsl:with-param name="distinct" select="syst/train/vagon/@*[position()=6]"/>
</xsl:call-template>

</table>
</body>
</html>
</xsl:template>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ВОТ ИЗ ЭТОГО ШАБЛОНА РАБОТАТЬ С ИСХОДНЫМ ДЕРЕВОМ И ИМЕТЬ ДОСТУП К РОДИТЕЛЬСКИМ
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
УЗЛАМ КАК?
<xsl:template match="syst/train/vagon/@*[position()=6]" mode="set:distinct">
<td nowrap="yes">
<xsl:value-of select="."/>
</td>
</xsl:template>

<xsl:template match="syst/train/vagon/@*[position()=4]" mode="set:distinct">
<tr>

<!--
<td>
<xsl:value-of select="syst/train/@*[position()=1]"/>
</td>
-->
<td colspan="24">
<xsl:value-of select="."/>
</td>
</tr>
</xsl:template>

<xsl:template name="headTable">
<!--<xsl:for-each select="(/*/*/*/@*[position()=6])">-->
<td>
<xsl:value-of select="@*[position()=6]"/>
<!--<xsl:value-of select="set:distinct(@*[position()=6])"/>-->
</td>
<!--</xsl:for-each>-->
</xsl:template>
</xsl:stylesheet>[
...
Рейтинг: 0 / 0
работа с двумя наборами узлов
    #34471698
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слободской Андрейможно ли в
XSL работать с двумя деревьями одновременно
Можно.
Токо я предложу маленько другой способ.
Примерно так:
Код: plaintext
if test="document('source1.xml')//что[@id=current()/@id]
Тоесть сравниваешь значение одного и того же докумнета, токо как бы один парсишь, а второй(тот же самый) подгружаешь либо import'oм либо include'ом.
...
Рейтинг: 0 / 0
работа с двумя наборами узлов
    #34471733
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясни еще вот это:
РАБОТАТЬ С ИСХОДНЫМ ДЕРЕВОМ И ИМЕТЬ ДОСТУП К РОДИТЕЛЬСКИМ УЗЛАМ КАК?
Если тебе нужен просто доступ к родительским узлам, почему бы не использовать для этого оси (ancestor() и ей подобные).
Поясни этот момент
...
Рейтинг: 0 / 0
работа с двумя наборами узлов
    #34472016
SuSaМожно.
Токо я предложу маленько другой способ.
Примерно так:

if test="document('source1.xml')//что[@id=current()/@id]
Тоесть сравниваешь значение одного и того же докумнета, токо как бы один парсишь, а второй(тот же самый) подгружаешь либо import'oм либо include'ом.
можешь дать елементарный пример?
Как обратиться к импорту.
сорри за ламерство но нуна срочно прям сегодня, а ещё конь не валялся.
SuSaЕсли тебе нужен просто доступ к родительским узлам, почему бы не использовать для этого оси (ancestor() и ей подобные).
Поясни этот момент
просто при вызове шаблона
<xsl:template name="set:distinct">
он возвращает урезанный набор узлов.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:set="http://exslt.org/sets"
exclude-result-prefixes="set">

<xsl:template name="set:distinct">
<xsl:param name="nodes" select="/.."/>
<xsl:param name="distinct" select="/.."/>
<xsl:choose>
<xsl:when test="$nodes">
<xsl:call-template name="set:distinct">
<xsl:with-param name="distinct" select="$distinct | $nodes[1][not(. = $distinct)]"/>
<xsl:with-param name="nodes" select="$nodes[position() > 1]"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="$distinct" mode="set:distinct"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="node()|@*" mode="set:distinct">
<xsl:copy-of select="." />
</xsl:template>

</xsl:stylesheet>
...
Рейтинг: 0 / 0
работа с двумя наборами узлов
    #34472258
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщето это и был пример, ну ладно
вот подробнее:
xsl
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sch="http://purl.oclc.org/dsdl/schematron" version="2.0">
   <xsl:template match="author">
      <xsl:choose>
         <xsl:when test="document('source1.xml')//author[@id=current()/@id]"> uslovie vipolnilos' udachno </xsl:when>
         <xsl:otherwise>The author is not in the database <xsl:text>
</xsl:text>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
   <xsl:template match="text()"/>
   <xsl:template match="/">
      <xsl:apply-templates/>
   </xsl:template>
</xsl:stylesheet>
xml c именем source1.xml, его же парсишь, с ним же и сравниваешь:
Код: plaintext
1.
2.
3.
4.
<list>
     <author id="a1">Alice</author>
     <author id="p1">Paul</author>     
     <author id="p2">Peter</author>
</list>
Результат:
Код: plaintext
1.
2.
3.
4.
<?xml version="1.0" encoding="UTF-8"?> 
uslovie vipolnilos' udachno 
 uslovie vipolnilos' udachno 
 uslovie vipolnilos' udachno 
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / работа с двумя наборами узлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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