【问题标题】:tsql for XML format the values as elementstsql for XML 将值格式化为元素
【发布时间】:2013-10-15 18:44:03
【问题描述】:

我试图将列中的值作为 XML 元素。 是否可以在 sql server 中使用 For XML 来做到这一点?

declare @XMLTest table( [Name] [nvarchar](50) NOT NULL )

INSERT @XMLTest ([Name]) VALUES (N'One¬d¦Uº')
INSERT @XMLTest ([Name]) VALUES (N'Two')
INSERT @XMLTest([Name]) VALUES (N'Three')

我想从选择查询的不同行中获取以下内容。

这将帮助我转义值中的无效字符,以便它们可以正确地序列化为 XML。

<One_x00AC_d_x00A6_U_x00BA_/>
<Two/>
<Three/>

是否可以从 FOR XML 查询中获得此返回?

【问题讨论】:

  • 哪个 SQL Server 版本?
  • @Szymon SQL Server 2008 R2
  • 不认为这是可能的,你为什么要这样做?之后你将如何查询 xml?
  • 目的不是查询xml,而是确保数据被清理并有效用作XML元素,并且可以是任何语言,而不仅仅是en-US

标签: sql-server xml path for-xml-path select-for-xml


【解决方案1】:

从这里开始:

declare @XMLTest table( [Name] [nvarchar](50) NOT NULL )

INSERT @XMLTest ([Name]) VALUES (N'One')
INSERT @XMLTest ([Name]) VALUES (N'Two')
INSERT @XMLTest([Name]) VALUES (N'Three')

select * from @xmltest for xml auto

以 XML 格式返回。

或者只是一些蹩脚的连接。

declare @XMLTest table( [Name] [nvarchar](50) NOT NULL )

INSERT @XMLTest ([Name]) VALUES (N'One')
INSERT @XMLTest ([Name]) VALUES (N'Two')
INSERT @XMLTest([Name]) VALUES (N'Three')

select '<' + Name + '/>' from @xmltest

如果你的目标更明确会有所帮助。

此查询提供了有关如何自定义 XML 内容格式的更多指导。

create table #xmltest (nID int primary key identity, [Name] [nvarchar](50) NOT NULL )
create table #xmldemo (Tag varchar, Parent Varchar, Other Varchar);
declare @i as int = 1;

INSERT #XMLTest ([Name]) VALUES (N'One')
INSERT #XMLTest ([Name]) VALUES (N'Two')
INSERT #XMLTest([Name]) VALUES (N'Three')

while (@i < 3)
begin
declare @tag as varchar(100) = '[Test!1!' + (select name from #XMLTest where nID = @i) + '!ELEMENT]';
declare @dsql as varchar(max) = 'select 1 as Tag, null as Parent, ''this'' as ' + @tag + ' from #xmltest for xml explicit';
exec(@dsql);
set @i += 1;
end

select * from #xmldemo;

drop table #xmldemo;
drop table #xmltest;

里面有一些无关紧要的额外内容,但它展示了你正在尝试的东西。

【讨论】:

  • 如果您阅读我的帖子,我提到“这将帮助我转义值中的无效字符,以便它们可以正确地序列化为 XML。”如果文本是使用 XML 引擎生成的,SQL Server 将从数据中删除无效字符,因此元素名称是有效的 XML。您的方法仅连接字符串,这无助于删除无效字符,因此对我不起作用。
  • 如果您有 INSERT #XMLTest ([Name]) VALUES (N'One¬d¦Uº'),它将生成无效的 XML 元素。
  • 如果您想额外清理内容,正如您在编辑中所述,您可以通过一个函数处理它,例如在 SO 的其他答案中找到的。 stackoverflow.com/questions/1007697/…
  • 我想在 SQL 服务器中使用 XML 引擎,这样我也可以进行国际化,而只是逃避所需的内容。 SQL Server 已经解决了这个问题,所以不想编译一大堆无效字符来手动转义。我希望我可以重用 SQL Server 已经实现的功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
相关资源
最近更新 更多