데이터베이스에서 직접 값을 가져 와서 XML 문자열을 작성한 다음 xml을 파일에 쓰는 방법이 있습니다. 나는 " '", "<"특수 문자 예 얻을 때까지SQL 서버에서 xml 열 값을 xml로 인코딩하십시오.
이 괜찮습니다, "&"등 사람이 내가 그들을 선택으로 나를 값을 인코딩 할 수 있도록 할 SQL 서버에 뭔가를 알고 있나요
; 예를 들면; 감사합니다myTable에
에서선택 인코딩 (service_status).
데이터베이스에서 직접 값을 가져 와서 XML 문자열을 작성한 다음 xml을 파일에 쓰는 방법이 있습니다. 나는 " '", "<"특수 문자 예 얻을 때까지SQL 서버에서 xml 열 값을 xml로 인코딩하십시오.
이 괜찮습니다, "&"등 사람이 내가 그들을 선택으로 나를 값을 인코딩 할 수 있도록 할 SQL 서버에 뭔가를 알고 있나요
; 예를 들면; 감사합니다myTable에
에서선택 인코딩 (service_status).
> = sql 2005를 사용하는 경우 xml 요소에 값을 채우고 다시 가져 오는 것이 가장 쉽다고 생각합니다. 이렇게하면 인코딩이 필요한 모든 항목이 강조됩니다.
그냥 SQL에서 할 중 하나를 CLR이 필요하지 않습니다declare @x xml, @str varchar(8000), @encStr varchar(8000)
set @x = '<a/>'
set @str = '><&'
set @x.modify(
'insert text{sql:variable("@str")}
as first into (/a)[1]')
set @encStr = CAST(@x.query('/a/text()') as varchar(8000))
select @encStr
--returns: ><&
FOR XML
절을 사용하십시오.
그것은 자동으로 여러 값에서 XML
을 구축 할 수 있습니다 :
WITH q AS (
SELECT 'Barnes & Noble' AS shop
UNION ALL
SELECT 'Marks & Spencer'
)
SELECT *
FROM q
FOR XML AUTO, TYPE
---
<q shop="Barnes & Noble" /><q shop="Marx & Spencer" />
를 그냥 기존 값 사용을 인코딩 할 경우
SELECT 'Barnes & Noble'
FOR XML PATH('')
---
Barnes & Noble
당신이 SQL Server 버전 2005/2008을 사용하는 경우, 그럼 CLR Functions을 사용하여 자신의 ENCODE
함수를 만들 수 있으므로 운이 좋습니다.
.net :(나는 자바 기반의 BPM 스위트를 사용하고있다. (:(그렇지 않으면 완벽 할 것이다. – Gais
호출 응용 프로그램이 사용자가 XML로 반환하는 내용을 작성하는 경우 데이터를 인코딩하는 것은 호출 응용 프로그램의 책임입니다. SQL Server에서 XML을 반환하려는 경우 귀하에게 달려 있으며 Quassnoi의 "FOR XML"대답은 정확합니다.
...
create function [dbo].[fn_XMLEscape](@s varchar(max)) returns varchar(max)
as
begin
declare @rs varchar(max)
set @rs = @s
set @rs = replace(@rs, '&', '&')
set @rs = replace(@rs, '''', ''')
set @rs = replace(@rs, '"', '"')
set @rs = replace(@rs, '>', '>')
set @rs = replace(@rs, '<', '<')
Return(@rs)
end
내 변형 :
CREATE FUNCTION dbo.fn_XmlEncode (@STR varchar(200)) RETURNS varchar(200) AS BEGIN IF CHARINDEX('&', @STR) > 0 BEGIN DECLARE @POS1 int, @POS2 int SET @POS1 = CHARINDEX('&', @STR) WHILE @POS1 > 0 BEGIN IF SUBSTRING(@STR, @POS1, 5) <> '&' SET @STR = LEFT(@STR, @POS1 - 1) + '&' + case when @POS1 < LEN(@STR) THEN SUBSTRING(@STR, @POS1 + 1, LEN(@STR) - @POS1) ELSE '' END SET @POS2 = CHARINDEX('&', SUBSTRING(@STR, @POS1 + 5, LEN(@STR))) IF @POS2 = 0 BREAK SET @POS1 = @POS1 + 4 + @POS2 END END WHILE CHARINDEX('<', @STR) > 0 SET @STR = REPLACE(@STR, '<', '<') WHILE CHARINDEX('>', @STR) > 0 SET @STR = REPLACE(@STR, '>', '>') RETURN @STR END GO -- Tests SELECT dbo.fn_XmlEncode('&&'), dbo.fn_XmlEncode('&<&>"&&')
당신은 당신의 SQL Server 버전 ... –
아우를 추가 할 수 있습니다! 정말로 슬픈! 하지만 C#에서 작은 기능을 적어서 SQL Server에 추가 할 수는 없습니까? – Kirtan
나는 그것에 대해 갈 우수한 기사에 대한 참고 자료를 추가했다. – Kirtan