powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Дети 1 уровня
37 сообщений из 37, показаны все 2 страниц
Дети 1 уровня
    #38740062
xPath выражение чтобы получить детей только 1 уровня вложенности?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740086
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерьянка,

Код: xml
1.
*
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740088
* выбирает детей, внуков, правнуков и т.д., а я говорю только детей 1 уровня
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740089
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерьянка* выбирает детей, внуков, правнуков и т.д.,Сами придумали или где прочитали?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740092
у меня так работает, select="*", выбирает все дочерние узлы, а надо дочерние без ихних детей, это возможно?
есть узел /shop, мне нужно выбрать только /shop/* одного уровня, без внуков и т.д.
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740097
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерьянка,

Зачем? Узел - это имя, атрибуты и дети. Если Вам нужен другой узел - создайте какой Вашей душе угодно
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740498
Наверное неправильно выразился,
если скажу "мне нужны дочерние элементы 1 уровня", то как?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740503
Когда в документации xPath пишут "все дочерние узлы элемента", то в понятие "дочерние" дети входят или нет?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740601
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВалерьянкаНаверное неправильно выразился,
если скажу "мне нужны дочерние элементы 1 уровня", то как?да уж, мастер неправильно выражаться 90го уровня :)

потомки 1го уровня.

ВалерьянкаКогда в документации xPath пишут "все дочерние узлы элемента", то в понятие "дочерние" дети входят или нет?"дочери" и "сыновья" это вообще-то подмножества общего "дети". ну, с родственно-половой точки зрения. логично предположить, что в мире xml принцип тот же — дочерьми и детьми называют одних и тех же спиногрызок.

это всё дословные цитаты? а документация вообще на каком языке? потомков более глубоких уровней по-английски называют grandchilren , по-русски это были бы внуки, но у нас с внуками связаны немного иные традиции (слабонервным по ссылке лучше не ходить, особенно в картинки. я серьезно.), поэтому смысл русского " все дочерние узлы" зависит от уровня образованности писателя. смысл нужно искать в контексте: либо автор просто не допер до слов "потомок" и "уровень", которые не оставляют места двусмысленностям, либо имел ввиду именно детей, а не внуков, а все/не все зависит от каких-то посторонних условий.
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740626
наконецто хоть тут ясность есть, спасибо)

* Matches any element node - выбирает элементы текущего узла, ОДНОГО уровня, верно?
/bookstore/* Selects all the child nodes of the bookstore element - здесь тоже выбираются именно дочерние элементы ОДНОГО уровня?

простите что достаю, но эти двусмысленности не дают четко расставить в голове понятия.

Узел - это тоже элемент? Элемент - если имеет детей - он узел, верно?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740669
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерьянка* Matches any element node - выбирает элементы текущего узла, ОДНОГО уровня, верно?когда про уровни явно ничего не сказано, по умолчанию подразумевается один уровень.

Валерьянказдесь тоже выбираются именно дочерние элементы ОДНОГО уровня?запрос типа xxx/* всегда выбирает элементы одного уровня.
запрос типа xxx//* выбирает потомков всех уровней в один список.
это практически все, что касается вопроса один/не один уровень в выборке.

ВалерьянкаУзел - это тоже элемент? Элемент - если имеет детей - он узел, верно?с точки зрения xml и dom это одно и то же вне зависимости от наличия детей — объект один и тот же, от того, что его коллекция потомков пустая или нет, его название не меняется.
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740755
А если к * требуется добавить и других потомков?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740837
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем в одном списке потомки разных уровней?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740881
в шаблоне для item есть apply-template select="modification/item". Но так как во временном дереве item из исходного набора скопировано только *, то не хватает вложенных элементов для работы шаблона. Я предполагаю, что шаблон для modification/item их не видит
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740922
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерьянкав шаблоне для item есть apply-template select="modification/item". Но так как во временном дереве item из исходного набора скопировано только *, то не хватает вложенных элементов для работы шаблона. Я предполагаю, что шаблон для modification/item их не видитXpath тут вообще ни при чем. xsl:copy копирует только первый уровень, xsl:copy-of копирует все уровни. который из них использован?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740931
так мы же выше обсуждали, что * выбирает только первый уровень!
значит, copy-of копирует и всех потомков?

зубы можно сломать )
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740939
разговор идет в контексте вашего примера

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:for-each select="exsl:node-set($item_tmp)">
		<xsl:sort />
		<xsl:apply-templates select="tmp_item" />
</xsl:for-each >
<xsl:templates match="item">
  <tmp_item>
		<xsl:copy-of select="*"/>
  </tmp_item>
</xsl:templates>

<xsl:templates match="tmp_item">
</xsl:templates>



<xsl:copy-of select="*"/> - копирует всех потомков узла item? но как это вяжется с документацией?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740955
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как все запущено-то. может ну его, этот xml? не ваше это.

в последний раз объясняю, теперь на пальцах.

исходные данные:
Код: xml
1.
2.
3.
4.
5.
6.
<item n="1">
 <modifications n="1"/>
</item>
<item n="2">
 <modifications n="2"/>
</item>



при выборке одного уровня (/*) возвращается (например в цикл for-each) это:
Код: xml
1.
2.
3.
4.
5.
6.
<item n="1">
 <modifications n="1"/>
</item>
<item n="2">
 <modifications n="2"/>
</item>



при выборке всех уровней (//*) возвращается это:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<item n="1">
 <modifications n="1"/>
</item>
<modifications n="1"/>
<item n="2">
 <modifications n="2"/>
</item>
<modifications n="2"/>

то есть цикл пройдется по четырем элементам. только не нужно думать, что /item/modifications[@n="1"] и /modifications[@n="1"] это разные элементы, это один и тот же элемент.

при копировании /* через xsl:copy получается это:
Код: xml
1.
2.
<item n="1"/>
<item n="2"/>



при копировании /* через xsl:copy-of получается это:
Код: xml
1.
2.
3.
4.
5.
6.
<item n="1">
 <modifications n="1"/>
</item>
<item n="2">
 <modifications n="2"/>
</item>



домашнее задание: что получится при копировании //* обоими способами?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740963
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерьянкаразговор идет в контексте вашего примера

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<xsl:for-each select="exsl:node-set($item_tmp)">
		<xsl:sort />
		<xsl:apply-templates select="tmp_item" />
</xsl:for-each >
<xsl:templates match="item">
  <tmp_item>
		<xsl:copy-of select="*"/>
  </tmp_item>
</xsl:templates>

<xsl:templates match="tmp_item">
</xsl:templates>




<xsl:copy-of select="*"/> - копирует всех потомков узла item? но как это вяжется с документацией?прекрасно вяжется: http://msdn.microsoft.com/en-us/library/ms256183(v=vs.110).aspx
The subtree below each of these nodes is copied to the result tree in its entirety.

приложите в конце концов xml и xsl-файлы, теория вам изложена корректно аж двумя людьми, следовательно косячат либо ваши руки либо ваш парсер.
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740980
Antonariy, нельзя "ну его", сайт ведь работает, кормилец, надо разбираться, выбора нет

//* через copy
Код: xml
1.
2.
3.
4.
<item n="1"/>
<modifications n="1"/>
<item n="2"/>
<modifications n="2"/>



//* через copy-of
Код: xml
1.
2.
3.
4.
5.
6.
<item n="1">
 <modifications n="1"/>
</item>
<item n="2">
 <modifications n="2"/>
</item>



верно?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38740987
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое верно, во втором не хватает /modifications 1 и 2.

тройбан :)
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38741009
тот же набор что и при выборке всех уровней (//*) ? проясняется
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38741014
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерьянкавыбора нетнанять специалиста
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38741015
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерьянкатот же набор что и при выборке всех уровней (//*) ? проясняетсяда
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38741031
а можно еще такой вопрос, пожалуйста,

Код: xml
1.
2.
3.
4.
<xsl:for-each select="exsl:node-set($item_tmp)/item">
		<xsl:sort/>
		<xsl:apply-templates select="tmp_item" />
</xsl:for-each >



в этом временном дереве добавлен элемент shop для вычислений и корректного вывода item


Код: xml
1.
2.
3.
4.
5.
6.
<xsl:templates match="item">
  <tmp_item>
		<xsl:copy-of select="*"/>
                <shop><xsl:copy-of select="/shop/*"/></shop> <!-- нужно для вычислений курсов и цен -->
  </tmp_item>
</xsl:templates>



в шаблоне для item есть вызов шаблона для вложенных modification

Код: xml
1.
2.
3.
4.
<xsl:templates match="tmp_item">
     <!--в этом шаблоне элементы shop доступны и все вычисления ок--> 
     <xsl:apply-template select="modification/item"/>
</xsl:templates>



Код: xml
1.
2.
3.
<xsl:templates match="modification/item">
     <!--А в этом шаблоне элементы shop НЕ доступны и вычисления для modification не производятся--> 
</xsl:templates>



почему так?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38741122
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему должно быть иначе? shop добавлен в tmp_item и не добавлен в modification/item
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38742061
Antonariy,

я предполагал, что вы это скажете, но.. если я добавил во временный XML для item потомки shop, то почему шаблон modification/item видит потомков item, но не видит потомков shop?
как эту тему правильно обозвать? область видимости шаблона?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38742071
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне надоело представлять все эти конструкции в уме по словесным описаниям и куцым огрызкам кода.
либо выкладывайте файлы, либо разбирайтесь дальше сами.
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38742096
намёк понял! )
согласен полностью, просто там XML огромный и шаблон тоже, как мне кажется, прикрепил xml/ xsl файлы.

для цикла по node-set создан шаблон item, в котором создается временное дерево sort_item, для обработки узлов которого создан шаблон sort_item, все работает на 99%, кроме того, что в шаблоне modifications/item не видно элементов от узла shop, т.е. например в
<a href="{/shop/path}{fullpath}{path}/"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
не видны значения shop/path, без которых не выводится цена и корректная ссылка
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38742099
что-то не вижу файлов которые прикрепил, еще раз
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38743566
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жесть.

ладно xml, но xsl-то надо было почистить от тех участков, которые проблем не имеют. у меня это всё вообще не заработало из-за бесконечной рекурсии.
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38743965
Antonariy почистить от тех участков, которые проблем не имеют

например? где там бесконечная рекурсия?
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38744360
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВалерьянкаAntonariy почистить от тех участков, которые проблем не имеют

например? например
<!-- Строка ссылок на другие страницы каталога -->
<!-- Цикл с шагом 10 для select'a количества элементов на страницу -->

они как-то иллюстрируют обсуждаемую проблему? нет. километры мутных условий при выведении цены? тоже нет.

Валерьянкагде там бесконечная рекурсия?не знаю.
код тяжелый, я потратил минут 10 на чтение, концов в этой каше не нашел, забил.
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38744382
Antonariy<!-- Строка ссылок на другие страницы каталога -->
<!-- Цикл с шагом 10 для select'a количества элементов на страницу -->

они как-то иллюстрируют обсуждаемую проблему?

ой, блин, аж стыдно, поубирать неотносящееся к проблеме, верно,
простите.
можно я попробую исправить это и еще раз выложить??
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38744411
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38744634
Antonariy,

поубирал все лишнее, теперь гораздо нагляднее
...
Рейтинг: 0 / 0
Дети 1 уровня
    #38744635
Antonariy,

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


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