如何处理& XML格式的字符

时间:2016-02-23 06:45:27

标签: sql sql-server xml tsql

我有一些样本数据,如

CREATE TABLE #Employee
(Id INT, Name NVARCHAR(100), Status TINYINT)
GO
INSERT INTO #Employee ( Id, Name, Status)
Values (1, '&Basavaraj Biradar', 0),
        (2, 'Shree Biradar', 0),
        (3, '&Kalpana Biradar', 0),
        (4, '& ', 0)
GO

当没有特殊字符时它会变得很好但是当字符像 - 或&amp ;.它不会来

错误显示为

Msg 9411, Level 16, State 1, Line 2
XML parsing: line 1, character 14, semicolon expected

我的查询是这样的:

select cast('<N>'+replace(replace(replace(Name, ' ', '</N><N>'),' ', '</N><N>'),'-','-</N><N>')  +'</N>' as xml) from #Employee

当name具有普通字符串时,它工作正常,但不适用于特殊字符。 建议我

2 个答案:

答案 0 :(得分:2)

“&”是XML中的特殊字符,因此您需要将其转义。请改用&amp;

按照现有代码中的模式,将Name字段引用替换为replace(Name, '&', '&amp;')

更新后的查询

select cast('<N>'+replace(replace(replace( replace( Name, '&', '&amp;')  , ' ', '</N><N>'),' ', '</N><N>'),'-','-</N><N>')  +'</N>' as xml) from #Employee

我得到了这个结果

<N>&amp;Basavaraj</N><N>Biradar</N> 
<N>Shree</N><N>Biradar</N>
<N>&amp;Kalpana</N><N>Biradar</N> 
<N>&amp;</N><N />

答案 1 :(得分:0)

试试这样:

CREATE TABLE #Employee
(Id INT, Name NVARCHAR(100), Status TINYINT)
GO
INSERT INTO #Employee ( Id, Name, Status)
Values (1, '&Basavaraj Biradar', 0),
        (2, 'Shree Biradar', 0),
        (3, '&Kalpana Biradar', 0),
        (4, '& ', 0)
GO

select cast('<N>'+replace(replace(Name,'&','&amp;'), ' ', '</N><N>')  +'</N>' as xml) from #Employee

--DROP TABLE #Employee