日期:2014-05-18  浏览次数:20399 次

sql server 2005 xml查询
实例:<title lang="en">Everyday Italian</title><title lang="en">XQuery Kick Start</title>
以上xml
需要取出文本 Everyday Italian XQuery Kick Start 
如果不知道标签名称的情况下,把标签都过滤掉,取出以上文本,改怎么查呢。。。。。

------解决方案--------------------
SQL code
DECLARE @x XML 
SET @x='<title lang="en">Everyday Italian</title><title lang="en">XQuery Kick Start</title>'
SELECT T.c.value('(.)[1]','VARCHAR(50)') AS en   
from  @x.nodes('title') T(c)
/*
en
--------------------------------------------------
Everyday Italian
XQuery Kick Start

(2 行受影响)

*/

------解决方案--------------------
探讨

现在的情况是不知道任何节点名称 可能是任意的xml文档

------解决方案--------------------
SQL code
DECLARE @x XML='<title lang="en">Everyday Italian</title><title lang="en">XQuery Kick Start</title>'

SELECT @x.query('/title/text()[1]')
/*
Everyday ItalianXQuery Kick Start
*/
SELECT 
t.c.value('.[1]','varchar(50)')
FROM @x.nodes('title')T(c)
/*
Everyday Italian
XQuery Kick Start
*/

------解决方案--------------------
探讨

如果查询属性 lang="en" 的节点中的文本呢 过滤掉标签

------解决方案--------------------
探讨

现在只知道属性lang=‘en’ 不知道节点信息

------解决方案--------------------
SQL code
DECLARE @x XML 
SET @x='<title lang="en">Everyday Italian</title><title2 lang="en">XQuery Kick Start</title2>'
SELECT T.c.value('.[1]','VARCHAR(50)') AS en   
from  @x.nodes('*[@lang="en"]') T(c)