解析openxml并获取给定节点的名称值集合

时间:2013-10-03 13:44:07

标签: sql tsql sql-server-openxml

我有一个xml文档,其中包含一些我不知道其名称的自定义字段。我想生成一个select语句,它将以名称值样式列出内容。

我找到sofar的所有示例都要求我知道节点的名称。 即。

declare @idoc int
     declare @doc nvarchar(max); set 
     @doc = '<user>
  <additionalfields>
    <Account__Manager>Fred Dibner</Account__Manager>
    <First__Aider>St Johns Ambulance</First__Aider>
  </additionalfields>
</user>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;
SELECT    * FROM       OPENXML (@idoc, 'user/additionalfields/',1) 

是否有可能实现这一目标?

1 个答案:

答案 0 :(得分:0)

我在经过相当多的实验后找到了答案。(顺便说一句,双下划线替换是由于某些数据库字段名称的输出格式。)

SELECT replace(name,'__',' ') as name, value 
            FROM OPENXML (@idoc, '/user/additionalfields/*',1) 
            WITH (          
                Name  nvarchar(4000) '@mp:localname',
                value  nvarchar(4000) './text()'
                  ) 

results