从xml数据中获取元素值

时间:2014-05-21 08:23:37

标签: sql-server tsql xquery

我有一些不同结构的xmls,我想从中获取所有值,包括空值。过了一段时间,我得写了这个小样本代码:

declare @xml xml = '
<e xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Code>code1</Code>
  <DepartmentCode xsi:nil="true" />
  <Email>email1</Email>
  <AddressId xsi:nil="true" />
  <IsActive>1</IsActive>
</e>
<e xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Code>code2</Code>
  <DepartmentCode xsi:nil="true" />
  <Email>email2</Email>
  <AddressId xsi:nil="true" />
  <IsActive>0</IsActive>
</e>'

;with sub as 
(
SELECT Tbl.Col.value('.', 'nvarchar(max)') as Value
FROM @xml.nodes('e//text()') Tbl(Col)
)
select * from sub s

但它不包括空值。如何更改代码以获取结果中的空值?

1 个答案:

答案 0 :(得分:3)

你没有得到它们,因为你是从//text()

中选择的

尝试从

中选择
SELECT  Tbl.Col.value('.', 'nvarchar(max)') as Value
FROM @xml.nodes('e//*') Tbl(Col)