是否可以在XML数据类型中存储非字母数字字符(更具体地说是换行符)?
下面的代码说明了我的问题:
declare @a xml
declare @b nvarchar(max)
set @b = '<Entry Attrib="1'+CHAR(13)+'2" />'
print @b
set @a=convert(xml,@b,1)
set @b=convert(nvarchar, @a,1)
print @b
输出结果为:
<Entry Attrib="1
2" />
<Entry Attrib="1 2"/>
有什么方法可以保持断线完整吗?
我的实际问题是将值存储在表中(而不是局部变量),所以也许我的表中的相应XML列有一些设置可以完成这项工作吗?
答案 0 :(得分:2)
这是不可能的。 XML数据类型存储为XML DOM树,而不是字符串。
如果要保留空格,则必须将其存储为varchar。
答案 1 :(得分:2)
我的answer in the XSLT context应该适用于此处:
经常存储XML解析的实体 在计算机文件中,用于编辑 方便,组织成行。 这些线通常由分隔线组成 某些角色的组合 回车(#xD)和换行 (#xA)。
所以这可能就是你要找的东西:
set @b = '<Entry Attrib="1
2" />'
答案 2 :(得分:0)
根据XML规范,XML标记内的空格不被认为是重要的,并且不会被保留。但是,元素之外的空白区域将是:
declare @a xml
declare @b nvarchar(max)
set @b = '<Entry Attrib="12"> fo'+CHAR(13)+'o</Entry>'
print @b
set @a=convert(xml,@b,1)
set @b=convert(nvarchar(max), @a,1)
print @b
将输出:
<Entry Attrib="12"> fo
o</Entry>
<Entry Attrib="12"> fo
o</Entry>