2011-10-29 2 views
0

아포스트로피가 포함 된 XML 문자열이 있습니다. 아포스트로피를 해당하는 &으로 바꾸면 수정 된 문자열을 XElement로 구문 분석합니다. 그러나 XElement는 '을 아포스트로피로 되돌리고 있습니다.XElement가 문자 엔티티 참조를 디코딩하지 못하게하는 방법

XElement.Parse가 인코딩 된 문자열을 보존하도록 강제 설정하려면 어떻게해야합니까?

string originalXML = @"<Description><data>Mark's Data</data></Description>"; //for illustration purposes only 
string encodedApostrophe = originalXML.Replace("'", "&#39;"); 
XElement xe = XElement.Parse(encodedApostrophe); 
+1

왜 필요합니까? 그것들은 XML에서 동등합니다. –

+0

나는 위의 "인코딩"이 XML을 작성할 때 클라이언트가 명시 적으로 요구 한 정확히 한 가지 경우를 가졌지 만 읽는 중 결코 ... .NET에서 처리하려는 경우 두 가지 (따라서 보존 할 필요가 없음) .NET 외부에서 처리해야하는 경우 처음 작성한 것과 같은 방식으로 작성해야합니다. – Yahia

+0

RE : 왜 필요합니까? ? 다운 스트림에서 xml은 동적으로 생성 된 일부 JavaScript에 포함됩니다. 포함 된 어포 스트로피는 JavaScript 문자열을 나눕니다. –

답변

1

올바른 동작입니다. '이 허용되는 곳에서는 &apos;, &#39; 또는 &#x27;과 동일하게 작동합니다.

originalXML.Replace("'", "&amp;#39;") 

또는 원본 XML을 구문 분석하고 수정 : 당신이 XML 리터럴 문자열 &#39;을 포함 할 경우, &를 인코딩해야

XElement xe = XElement.Parse(originalXML); 

var data = xe.Element("data"); 

data.Value = data.Value.Replace("'", "&#39;"); 

그러나이 일을하는 것은 정말 이상한 것 같다. 어쩌면 해결하려는 문제에 대한 더 나은 해결책이있을 수 있습니다.

또한이 인코딩은 ASCII와 동일하지 않으며 character entity references입니다. 숫자 값은 문자의 유니 코드 코드 포인트를 기반으로합니다.

+0

Thx! 나는 정확한 이름을 반영하기 위해 질문을 편집했다 : "문자 엔티티 참조" –

+0

RE : "아마 더 좋은 해결책이있다 ..."나는 제안에 개방적이다. 원본 XML 문자열에 아포스트로피가 포함될 수 있습니다. XElement에 저장해야하며 *에는 아포스트로피가 포함되어서는 안됩니다. 또한 XElement 내의 값은 실제로 HTML로 인코딩되어야합니다. –

관련 문제