读取XML节点中的值 - T-SQL

时间:2013-07-29 13:45:41

标签: sql-server xml tsql nodes

这是我的代码.......

DECLARE @XML AS XML;

SET @XML = CAST('<Session id="ID969138672" realTimeID="4300815712">

  <VarValues>
    <varValue id="ID123" source="Internal" name="DisconnectedBy">VisitorClosedWindow</varValue>
    <varValue id="ID1234" source="PreChat"  name="email">1234@mail.ru</varValue>
  </VarValues>

</Session>
' AS XML)

SELECT 
 xmlData.Col.value('@id','varchar(max)')
,xmlData.Col.value('@source','varchar(max)')
,xmlData.Col.value('@name','varchar(max)')
FROM @XML.nodes('//Session/VarValues/varValue') xmlData(Col);

这是输出.....

enter image description here

如何包含varValue的实际值?

我需要阅读值 VisistorClosedWindow 1234@mail.ru 以及

2 个答案:

答案 0 :(得分:17)

你可以这样做:

xmlData.Col.value('.','varchar(max)')

所以选择将是:

SELECT 
 xmlData.Col.value('@id','varchar(max)')
,xmlData.Col.value('@source','varchar(max)')
,xmlData.Col.value('@name','varchar(max)')
,xmlData.Col.value('.','varchar(max)')
FROM @XML.nodes('//Session/VarValues/varValue') xmlData(Col);

答案 1 :(得分:2)

只需使用.value('.', 'varchar(50))行:

SELECT 
     xmlData.Col.value('@id','varchar(25)'),
     xmlData.Col.value('@source','varchar(50)'),
     xmlData.Col.value('@name','varchar(50)'),
     xmlData.Col.value('.','varchar(50)')         -- <== this gets your the element's value
FROM @XML.nodes('//Session/VarValues/varValue') xmlData(Col);