首页 > 解决方案 > 通过 SQL Server XML 函数处理 XML prolog

问题描述

我有一个带有 XML 列的大型数据库表。XML 内容是一种文件,如下所示:

<?int-dov version="1.0" encoding="UTF-8" standalone="no"?>
<ds:datastoreItem ds:itemID="{F8484AF4-73BF-45CA-A524-0D796F244F37}" xmlns:ds="http://schemas.openxmlformats.org/officeDocument/2006/customXml"><ds:schemaRefs><ds:schemaRef ds:uri="http://schemas.openxmlformats.org/officeDocument/2006/bibliography"/></ds:schemaRefs></ds:datastoreItem>

我正在寻找一种函数或快速方法来获取 T-SQL 查询中的独立属性值。当我运行以下查询时:

select  XmlContent.query('@standalone') from XmlDocuments

我收到此错误消息:

Msg 2390, Level 16, State 1, Line 4
XQuery [XmlDocuments.XmlContent.query()]: Top-level attribute nodes are not supported

所以,如果有人给我一个解决这个问题的解决方案,我将不胜感激。

标签: sql-serverxmlxpathxquery

解决方案


您可以使用该processing-instruction()功能来获得它。

SELECT @xml.value('./processing-instruction("int-dov")[1]','nvarchar(max)')
结果
版本=“1.0”编码=“UTF-8”独立=“否”

如果您只想获得standalone零件,我发现的唯一方法是从中构造一个 XML 节点:

SELECT CAST(
  N'<x ' +
  @xml.value('./processing-instruction("int-dov")[1]','nvarchar(max)') +
  N' />' AS xml).value('x[1]/@standalone','nvarchar(10)'
结果

db<>小提琴


推荐阅读