Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / организация счетчика / 15 сообщений из 15, страница 1 из 1
21.02.2007, 14:29
    #34347164
XEugene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
XML такой структуры
Код: 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.
<Файл>
<Пачка>
<Поручение>
...
<ДругиеТеги>
...
<ВВП>
  <ВП>
       <ВП1></ВП1>
       <ВП2></ВП2>
       <ВП3></ВП3>
  </ВП>
  <ВП>
       <ВП1></ВП1>
       <ВП2></ВП2>
       <ВП3></ВП3>
  </ВП>
</ВВП>
</Поручение>
<Поручение>
...
<ДругиеТеги>
...
<ВВП>
  <ВП>
       <ВП1></ВП1>
       <ВП2></ВП2>
       <ВП3></ВП3>
  </ВП>
  <ВП>
       <ВП1></ВП1>
       <ВП2></ВП2>
       <ВП3></ВП3>
  </ВП>
  <ВП>
       <ВП1></ВП1>
       <ВП2></ВП2>
       <ВП3></ВП3>
  </ВП>
</ВВП>
</Поручение>
</Пачка>
</Файл>
обрабатывается таким xslt
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<xsl:output method="text" encoding = "windows-1251" />
<xsl:template match="/">
<xsl:for-each select="Файл/Пачка/Поручение/ВВП/ВП">
<xsl:value-of select="ВП1" /><xsl:text>,</xsl:text>
<xsl:value-of select="ВП2"/><xsl:text>,</xsl:text>
<xsl:value-of select="ВП3"/><xsl:text>,</xsl:text>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
Мне нужно организовать счётчик по тегу <Поручение>, для того чтобы записывать это число в начале каждой строки выходного файла.
Это нужно для того чтобы знать к какому Поручению относится то или иное ВП.
Как можно сделать такой счетчик? У меня в общем и цикла нет по тегу Поручение.
По поводу организации циклов со счетчиком при помощи рекурсии читал, но применить к своему случаю не получилось.
...
Рейтинг: 0 / 0
21.02.2007, 14:53
    #34347281
XEugene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
Проблема ещё в том, что цикл по тегам Поручение, которые нужно "посчитать" как раз не нужен.
Если сделать такой цикл, это приведёт к тому, что выводимые строки будут дублироваться на каждой итерации.
...
Рейтинг: 0 / 0
21.02.2007, 15:40
    #34347509
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
На этом форуме мне на этот вопрос ответить не смогли а вот на этом,
http://xmlhack.ru/forum/xml/topic4083.html
http://www.xmlhack.ru/forum/xml/topic4162.html
вполне, может подойдет
...
Рейтинг: 0 / 0
21.02.2007, 16:05
    #34347644
andrei77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
Не очень понял проблему, но первое что приходит в голову:

<xsl:variable name="счетчик">
<xsl:number level="any" count="Поручение"/>
</xsl:variable>

Он запишет тебе сюда массив типа:
1,2,3,4,5... n, где n - число поручений

а потом вставлять &счетчик к тем ВП которые соответствуют, и в то место, которое необходимо
...
Рейтинг: 0 / 0
21.02.2007, 17:04
    #34347873
XEugene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
andrei77 , а откуда я узнаю какая ВП соответствует какому элемента массива?
У меня n-ое количество Поручений, в каждом из которых своё количество ВП.
Если у меня нет цикла по Поручениям, то как я определю куда вставить тот или иной элемент этого массива?
И ещё - а как вывести?
Вот так <xsl:value-of select="&i"/>, если <xsl:variable name="i">, XRay выдаёт ошибку:
A semi colon character was expected.

SuSa , читаю.
...
Рейтинг: 0 / 0
21.02.2007, 17:12
    #34347909
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<xsl:output method="text" encoding = "windows-1251" />
<xsl:template match="/">
<xsl:for-each select="Файл/Пачка/Поручение">
<xsl:variable name="num" select="position()"/>
<xsl:for-each select="ВВП/ВП">
<xsl:value-of select="$num"/>
<xsl:value-of select="ВП1" /><xsl:text>,</xsl:text>
<xsl:value-of select="ВП2"/><xsl:text>,</xsl:text>
<xsl:value-of select="ВП3"/>,
</xsl:for-each>
</xsl:for-each>
</xsl:template>
...
Рейтинг: 0 / 0
21.02.2007, 17:16
    #34347919
andrei77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
во...
:)
позиция это да, грамотнее моей нумерации))
...
Рейтинг: 0 / 0
21.02.2007, 17:17
    #34347924
andrei77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
только не & а $ - опечатка
...
Рейтинг: 0 / 0
21.02.2007, 17:31
    #34347978
XEugene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
maXmo , да, вот это мне и нужно было.
Насчет цикла по поручениям, я значит просто как-то неправильно его делал.

Спасибо!
...
Рейтинг: 0 / 0
21.02.2007, 18:24
    #34348208
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
XEugeneНасчет цикла по поручениям, я значит просто как-то неправильно его делал.возможно, тебе следует лучше разобраться с понятием контекста преобразования. Это должно быть написано в спецификации в разделе, где объясняется алгоритм преобразования.
...
Рейтинг: 0 / 0
26.02.2007, 14:19
    #34354961
XEugene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
Так, а если у меня в теге Поручение содержится ещё такое
Код: plaintext
1.
2.
3.
<Документ>
   <серия></номер>
   <номер></номер>
</Документ>
и я хочу получить серию и номер документа для данного поручения в каждой выводимой строке, так же как номер поручения?

Если сделать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<xsl:output method="text" encoding = "windows-1251" />
<xsl:template match="/">
<xsl:for-each select="Файл/Пачка/Поручение">
<xsl:variable name="num" select="position()"/>
<xsl:variable name="seria" select="//Документ/серия"/>
<xsl:variable name="numdoc" select="//Документ/номер"/>
<xsl:for-each select="ВВП/ВП">
<xsl:value-of select="$num"/>
<xsl:value-of select="$seria"/><xsl:text>,</xsl:text>
<xsl:value-of select="$numdoc"/><xsl:text>,</xsl:text>
<xsl:value-of select="ВП1" /><xsl:text>,</xsl:text>
<xsl:value-of select="ВП2"/><xsl:text>,</xsl:text>
<xsl:value-of select="ВП3"/>,
</xsl:for-each>
</xsl:for-each>
</xsl:template>
то в каждой строке выводятся серия и номер из первого поручения.
В чем разница между получением номера текущей позиции(итерации) и получение текущего значения тега?
...
Рейтинг: 0 / 0
26.02.2007, 20:44
    #34356128
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
XEugeneТак, а если у меня в теге Поручение содержится ещё такое
Код: plaintext
1.
2.
3.
<Документ>
   <серия></номер>
   <номер></номер>
</Документ>

вот из этого ты точно ничего не получишь :)
А на счет:
XEugeneВ чем разница между получением номера текущей позиции(итерации) и получение текущего значения тега?
Разница есть, рсказывать ломает, вывод : читай спецификацию, раздел "12.4 Различные дополнительные функции", функция current
...
Рейтинг: 0 / 0
27.02.2007, 08:15
    #34356486
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
Разные вопросы на разных форумах задаешь XEugene или WalterScott правильно будет?
Неудивляйся SuSa и SuSanin тоже одно лицо
...
Рейтинг: 0 / 0
27.02.2007, 12:13
    #34357127
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
XEugeneто в каждой строке выводятся серия и номер из первого поручения.убери два слеша и почитай таки про контекст и селекторы, без понимания ты ничего не сможешь сделать.
...
Рейтинг: 0 / 0
27.02.2007, 13:22
    #34357445
XEugene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
организация счетчика
SuSaXEugene или WalterScott правильно будет?
Неудивляйся SuSa и SuSanin тоже одно лицоНу вот, теперь ты знаешь, кто есть ху :-)
Но обычно я кросспостинг не практикую.

maXmoубери два слеша и почитай таки про контекст и селекторы, без понимания ты ничего не сможешь сделать.Это верно, буду читать.

А в общем проблема была в ещё и в том что я пропустил ещё один тег, который был вложен в документ
и в который было вложено всё остальное(серия, номер и т.д.). Невнимательность, мать её...
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / организация счетчика / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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