Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Определение максимальной вложенности XML. / 8 сообщений из 8, страница 1 из 1
21.07.2008, 14:40
    #35442534
Dmitry_Minsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение максимальной вложенности XML.
Есть xml файл произвольной структуры, нужно определить его максимальную вложенность.
Как это можно сделать проще всего??
...
Рейтинг: 0 / 0
21.07.2008, 16:32
    #35442875
Volder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение максимальной вложенности XML.
Код: 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
21.07.2008, 17:46
    #35443071
Dmitry_Minsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение максимальной вложенности XML.
Код: 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
21.07.2008, 18:58
    #35443177
Dmitry_Minsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение максимальной вложенности XML.
Код: 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
22.07.2008, 10:34
    #35443926
Volder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение максимальной вложенности XML.
Dmitry_MinskТак вроде как работает. Идея в общем понятно. Спасибо.Ваш пример выдает также "3".
возможно есть зависимость от parser'a как они реализовывают ancestor axis.
Я бы использовал в Вашем случае
Код: plaintext
ancestor-or-self::*
...
Рейтинг: 0 / 0
22.07.2008, 10:39
    #35443948
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение максимальной вложенности XML.
1. в программировании отсчет ведетс с нуля (но это не в этом случаи)
2. вы же спросили кол-во вложенных элементов. Родительский тег таким не является.
...
Рейтинг: 0 / 0
22.07.2008, 14:04
    #35444723
Dmitry_Minsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение максимальной вложенности XML.
Для этого случая выдает 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
22.07.2008, 18:21
    #35445522
Volder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение максимальной вложенности XML.
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
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Определение максимальной вложенности XML. / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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