powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Дети 1 уровня
25 сообщений из 37, страница 1 из 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
25 сообщений из 37, страница 1 из 2
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Дети 1 уровня
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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