Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 исключение subnode из запроса  [new]
Testor1
Member

Откуда:
Сообщений: 679
Всем привет!

Как исключить из запроса subnode (em)

<root>
  <div class="t">Машина</div>,<div class="d">Слово1  <em>x1</em> Слово2 <em>x2</em> Слово3 <em>x3</em></div><div class="g"></div></root>



WITH query(t,g1,g2)
AS
(
	SELECT 
			ct.qt.value('.[1]', 'nvarchar(50)') as t,
			cd1.qd.value('.[1]', 'nvarchar(50)') as g1,
			cd2.qd.value('../.[1]', 'nvarchar(50)') as g2
	FROM dic_xml dx 

	OUTER APPLY dx.source.nodes('/root/div/.[@class =''t'']') ct(qt)
	OUTER APPLY dx.source.nodes('/root/div/.[@class =''d'']/em') cd1(qd)
	OUTER APPLY dx.source.nodes('/root/div/.[@class =''d'']/em') cd2(qd)
)
SELECT TOP 10 q.t, g1, g2
FROM query q 
10 янв 17, 21:02    [20091212]     Ответить | Цитировать Сообщить модератору
 Re: исключение subnode из запроса  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 119
Лично мне не понятно, откуда нужно исключить "em". Опишите подробнее, чего Вы хотите добиться в результате.
11 янв 17, 11:05    [20092594]     Ответить | Цитировать Сообщить модератору
 Re: исключение subnode из запроса  [new]
Testor1
Member

Откуда:
Сообщений: 679
Sybex
Лично мне не понятно, откуда нужно исключить "em". Опишите подробнее, чего Вы хотите добиться в результате.



<root>
  <div class="t">Машина</div>,<div class="d">Слово1  <em>x1</em> Слово2 <em>x2</em> Слово3 <em>x3</em></div><div class="g"></div></root>


Из указанной строки должен вывестись текст: "Слово1 Слово2 Слово3 ".
Содержимое текста в теге <em> не должно выводиться.
11 янв 17, 14:15    [20093761]     Ответить | Цитировать Сообщить модератору
 Re: исключение subnode из запроса  [new]
кролик-зануда
Guest
Testor1,
select CAST('<root>
               <div class="t">Машина</div>
              ,<div class="d">Слово1  <em>x1</em> Слово2 <em>x2</em> Слово3 <em>x3</em></div>
               <div class="g"></div>
             </root>'as xml).query('/root/div[@class="d"]/text()')
11 янв 17, 14:34    [20093887]     Ответить | Цитировать Сообщить модератору
 Re: исключение subnode из запроса  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
declare @x xml = '<root>
  <div class="t">Машина</div>,<div class="d">Слово1  <em>x1</em> Слово2 <em>x2</em> Слово3 <em>x3</em></div><div class="g"></div></root>';

select
 a.n.query('text()').value('.', 'varchar(max)')
from
 @x.nodes('/root/div[@class = "d"]') a(n);
11 янв 17, 14:40    [20093918]     Ответить | Цитировать Сообщить модератору
 Re: исключение subnode из запроса  [new]
Testor1
Member

Откуда:
Сообщений: 679
invm
declare @x xml = '<root>
  <div class="t">Машина</div>,<div class="d">Слово1  <em>x1</em> Слово2 <em>x2</em> Слово3 <em>x3</em></div><div class="g"></div></root>';

select
 a.n.query('text()').value('.', 'varchar(max)')
from
 @x.nodes('/root/div[@class = "d"]') a(n);


Спасибо! Сработало!

Пожалуйста, поясните как .query('text()'). влияет на логику выборки ?
11 янв 17, 16:11    [20094433]     Ответить | Цитировать Сообщить модератору
 Re: исключение subnode из запроса  [new]
invm
Member

Откуда: Москва
Сообщений: 9913
Testor1
Пожалуйста, поясните как .query('text()'). влияет на логику выборки ?
https://www.w3.org/TR/xpath/#section-Text-Nodes
child::text() selects all text node children of the context node

Сравните:
declare @x xml = '<root>
  <div class="t">Машина</div>,<div class="d">Слово1  <em>x1</em> Слово2 <em>x2</em> Слово3 <em>x3</em></div><div class="g"></div></root>';

select
 a.n.query('.'),
 a.n.query('./text()')
from
 @x.nodes('/root/div[@class = "d"]') a(n);
11 янв 17, 16:30    [20094576]     Ответить | Цитировать Сообщить модератору
 Re: исключение subnode из запроса  [new]
Testor1
Member

Откуда:
Сообщений: 679
Описание не совсем понятное.
автор
child::text() selects all text node children of the context node

наверное надо было бы добавить, что получает текст Node исключая из него все sub node.
11 янв 17, 17:00    [20094770]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить