2009-06-16 5 views
0

C#에서 XmlDocument 개체를 사용하여 만드는 XML이 있습니다.System.Xml.XmlDocument.OuterXml의 SQL 2005 XML 특수/이스케이프 문자

다음 XmlDocument.OuterXml 메서드를 사용하여 SQL 2005의 XML 열에 xml 데이터를 삽입하여 원시 xml을 가져옵니다.

문제는 XML에 몇 가지 특수 문자가 포함되어 있다는 것입니다. 즉 :  이것은 XML이 다양한 소스의 사용자 입력을 기반으로 구축 되었기 때문입니다.

삽입을 수행 할 때 XML 구문 분석 : 잘못된 XML 문자를 나타내는 SQL 오류 메시지가 표시됩니다.

CREATE TABLE #MyTable (MyColumn XML) 
INSERT INTO #MyTable VALUES ('<Element>&#x1F;&#x1C;</Element>') 

메시지 9420, 수준 16, 상태 1, 줄 2

XML 구문 분석 : 줄 1, 문자 (15), 불법 XML 문자

어떻게 내가 할 수있는 사람은 한 방향으로 날 지점 수 이거 해결해?

XmlDocument 개체 나 원본 XML 자체를 변경하는 것이 매우 어려울 수 있지만 RAW XML을 사용하는 메커니즘을 변경할 수 있습니다. 필요한 경우 데이터베이스 설정을 변경할 수도 있습니다.

답변

1

잘못된 문자가 포함 된 XmlDocument가있는 경우 기본적으로 유효한 XML이 없습니다. 탭, 캐리지 리턴 및 줄 바꿈 이외의 U + 0020 이하는 XML로 표현할 수 없습니다. 이유는 모르겠지만 사양에 따라 잘못된 XML입니다.

당신은 데이터베이스에서 유효하지 않은 XML의 원시 텍스트를 저장할 수 있습니다,하지만 난 당신이 첫 번째 장소 :

이 실제로하고 싶은에 XML 컬럼되고 싶어 이유를 몇 가지 이유가 가정 이 잘못된 XML을 보존 하시겠습니까? 정보의 출처와 필요한 정보를 알고 있습니까? 나는 가능한 한 데이터를 정화하려고 개인적으로 노력할 것입니다.

은 (, BTW 첫 번째 스택 오버플로 데이터 덤프는 매우 비슷한 문제가 있었다, 그래서 그냥 :) 아니다

+0

가 된 XmlDocument O를 만드는 방법이 있는가 I는 #MyTable 값으로 명확하게 해주기 ('</E의 lement>; # 1 × F < E의 lement> & A')를

삽입 공간을 추가 동일한 유효성 검사 규칙을 적용해야합니까? 이러한 문자는 html 텍스트 상자에 타이핑/붙여 넣기 한 사용자로부터 왔으며이 TextBox.Text는 XmlNode.InnerText에 할당되었습니다. XML이 유효하지 않은 경우이 시점에서 충돌이 발생하지 않았다는 사실에 놀랐습니다. –

+0

http://msdn.microsoft.com/en-us/library/56xykaw6.aspx (영문) –

+0

유효하지 않은 데이터를 보존 할 필요가 없습니다. 그것은 웹 페이지의 모든 사용자 입력이므로 어쨌든 어떤 이스케이프 문자가 들어 있는지 확실하지 않습니다. 나는 그것을 정화하고 싶습니다. 단지 우아한 해결책이 필요합니다. 전체 문자열을 반복하여 잘못된 문자를 제거하는 코드를 발견했습니다. 이것은 나에게 잘못된 것처럼 보입니다. 어떤 문자가 유효한지 코딩되지 않아야합니다. –

0

이 #MyTable VALUES ('& #의에서 x1F,'INTO 가능 INSERT이다)