Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Дети 1 уровня / 25 сообщений из 37, страница 1 из 2
07.09.2014, 23:56
    #38740062
Дети 1 уровня
xPath выражение чтобы получить детей только 1 уровня вложенности?
...
Рейтинг: 0 / 0
08.09.2014, 01:13
    #38740086
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дети 1 уровня
Валерьянка,

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

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

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

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

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

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

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

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

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

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

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

Код: 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
08.09.2014, 18:16
    #38740955
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дети 1 уровня
как все запущено-то. может ну его, этот 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
08.09.2014, 18:21
    #38740963
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дети 1 уровня
Валерьянкаразговор идет в контексте вашего примера

Код: 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
08.09.2014, 18:33
    #38740980
Дети 1 уровня
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
08.09.2014, 18:39
    #38740987
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дети 1 уровня
Первое верно, во втором не хватает /modifications 1 и 2.

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

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


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