powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSL count() Помогите посчитать теги
4 сообщений из 4, страница 1 из 1
XSL count() Помогите посчитать теги
    #39165702
Фотография Doomaty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите, пожалуйста, чайнику XSLT

Есть XML приблизительно следующей структуры:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<w:tcPr>
  <w:vmerge w:val='restart' />
  <w:vmerge />
  <w:vmerge />
  <w:vmerge />
  <g_g />
  <d_d />
  <w:vmerge w:val='restart' />
  <w:vmerge />
  <w:vmerge />
  <g_g />
  <d_d />
  <z_z />
  <w:vmerge w:val='restart' />
  <w:vmerge />
  <w:vmerge />
  <w:vmerge />
</w:tcPr>



Надо посчитать количество <w:vmerge /> следующих за <w:vmerge w:val='restart' /> до следующего <w:vmerge w:val='restart' />.


Такой подсчет:
<xsl:if test="w:tcPr/w:vmerge[@w:val='restart']">
<xsl:value-of select="count(../following-sibling::w:tcPr/w:vmerge)+1"/>
</xsl:if>

дает количество всех w:vmerge вниз по документу. Надо как-то его ограничить следующим w:vmerge[@w:val='restart']
...
Рейтинг: 0 / 0
XSL count() Помогите посчитать теги
    #39166891
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Doomaty,

а структуру XML менять можно? Если изменить структуру, то будет на много проще. И вообще желательно делать побольше тегов и поменьше атрибутов, легче будет работать и расширять.
...
Рейтинг: 0 / 0
XSL count() Помогите посчитать теги
    #39167413
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФридрихDoomaty,

а структуру XML менять можно?можно, но работать перестанет.
это экселевский файл.
...
Рейтинг: 0 / 0
XSL count() Помогите посчитать теги
    #39167432
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xsl:template match="*" mode="nomerge">
  <xsl:value-of select="position()"/>
</xsl:template>

<xsl:template match="w:vmerge">
  <xsl:if test="@w:val='restart'">
    <xsl:variable name="p"><xsl:apply-templates mode="nomerge" select="following-sibling::*[name()!='vmerge'][1]"/></xsl:variable>
    <xsl:value-of select="count(following-sibling::w:vmerge[position()&lt;$p])+1"/>
  </xsl:if>
</xsl:template>

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


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