powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Определение максимальной вложенности XML.
8 сообщений из 8, страница 1 из 1
Определение максимальной вложенности XML.
    #35442534
Dmitry_Minsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть xml файл произвольной структуры, нужно определить его максимальную вложенность.
Как это можно сделать проще всего??
...
Рейтинг: 0 / 0
Определение максимальной вложенности XML.
    #35442875
Volder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <xsl:for-each select="//node()">
         <xsl:sort select="count(ancestor::*)" data-type="number" order="descending"/>
         <xsl:if test="position()=1">
            <max_level>
               <xsl:value-of select="count(ancestor::*)"/>
            </max_level>
         </xsl:if>
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
Определение максимальной вложенности XML.
    #35443071
Dmitry_Minsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<node11>
	<node21 s='asd'>
		<node31>
			<node33/>
		</node31>
	</node21>
	<node22 s='asd'>
	</node22>
</node11>

Выдает 3, а должно быть 4
...
Рейтинг: 0 / 0
Определение максимальной вложенности XML.
    #35443177
Dmitry_Minsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<xsl:template match="/">
      <xsl:for-each select="//*">
         <xsl:sort select="count(ancestor::*)" data-type="number" order="descending"/>
         <xsl:if test="position()=1">
            <max_level>
               <xsl:value-of select="count(ancestor::*)"/>
            </max_level>
         </xsl:if>
      </xsl:for-each>
   </xsl:template>

Так вроде как работает. Идея в общем понятно. Спасибо.
...
Рейтинг: 0 / 0
Определение максимальной вложенности XML.
    #35443926
Volder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry_MinskТак вроде как работает. Идея в общем понятно. Спасибо.Ваш пример выдает также "3".
возможно есть зависимость от parser'a как они реализовывают ancestor axis.
Я бы использовал в Вашем случае
Код: plaintext
ancestor-or-self::*
...
Рейтинг: 0 / 0
Определение максимальной вложенности XML.
    #35443948
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. в программировании отсчет ведетс с нуля (но это не в этом случаи)
2. вы же спросили кол-во вложенных элементов. Родительский тег таким не является.
...
Рейтинг: 0 / 0
Определение максимальной вложенности XML.
    #35444723
Dmitry_Minsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для этого случая выдает 3.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<node11>
	<node21 s='asd'>
		<node31>
			<node33/>
		</node31>
	</node21>
	<node22 s='asd'>
	</node22>
</node11>

А для этого выдает 4.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<node11>
	<node21 s='asd'>
		<node31>
			<node33>
                        </node33>
		</node31>
	</node21>
	<node22 s='asd'>
	</node22>
</node11>

Проблема была не в том, с 0 считается или с 1, а в том что узел <node33/> как то игнорируется, и по разному выдается ответ.

Если же заменить node() на *, то все нормально, значения совпадают и равно 3.
...
Рейтинг: 0 / 0
Определение максимальной вложенности XML.
    #35445522
Volder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry_MinskВыдает 3, а должно быть 4 Dmitry_MinskЕсли же заменить node() на *, то все нормально, значения совпадают и равно 3.а сколько нужно-то в итоге?

по поводу разного результата, вот Вам подсказка:
Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <root>
         <xsl:for-each select="//node()">
            <xsl:sort select="count(ancestor::*)" data-type="number" order="descending"/>
            <xsl:if test="position()=1">
               <variant1>
                  <max_level>
                     <xsl:value-of select="count(ancestor::*)"/>
                  </max_level>
                  <val_last>
                     <xsl:value-of select="."/>
                  </val_last>
                  <name_last>
                     <xsl:value-of select="name()"/>
                  </name_last>
               </variant1>
            </xsl:if>
         </xsl:for-each>
         <xsl:for-each select="//*">
            <xsl:sort select="count(ancestor::*)" data-type="number" order="descending"/>
            <xsl:if test="position()=1">
               <variant1>
                  <max_level>
                     <xsl:value-of select="count(ancestor::*)"/>
                  </max_level>
                  <val_last>
                     <xsl:value-of select="."/>
                  </val_last>
                  <name_last>
                     <xsl:value-of select="name()"/>
                  </name_last>
               </variant1>
            </xsl:if>
         </xsl:for-each>
         <xsl:for-each select="//node()">
            <xsl:sort select="count(ancestor-or-self::*)" data-type="number" order="descending"/>
            <xsl:if test="position()=1">
               <variant1>
                  <max_level>
                     <xsl:value-of select="count(ancestor-or-self::*)"/>
                  </max_level>
                  <val_last>
                     <xsl:value-of select="."/>
                  </val_last>
                  <name_last>
                     <xsl:value-of select="name()"/>
                  </name_last>
               </variant1>
            </xsl:if>
         </xsl:for-each>
      </root>
   </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Определение максимальной вложенности XML.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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