문제

다음은 C# 코드입니다.

var sb = new StringBuilder();
var w = XmlWriter.Create(sb);
w.WriteStartElement("hello");
w.WriteAttributeString("target", "world ' \" !");
w.WriteEndElement();
w.Flush();
// then look at sb.ToString()

나는 다음과 같은 문자열을 얻고있다.

 <?xml version="1.0" encoding="utf-16"?><hello target="world ' &quot; !" /> 

단일 쿼트가 아니라 이중 쿼트를 피하는 것입니다. 그러나 xmlwriter.writeattributestring (String, String)의 문서는 다음과 같습니다.

속성 값에 이중 또는 단일 따옴표가 포함 된 경우 각각 "및 '로 대체됩니다.

문서가하는 말을하기 위해 설정해야 할 깃발이 있습니까?

도움이 되었습니까?

해결책

.NET Reflector를 사용하여 코드를 보면 System.xml.xmlTextEncoder.write (String) 메소드가 호출되는 것을 찾을 수 있습니다. 관심 강령은 다음과 같습니다.

if (!this.inAttribute || (this.quoteChar != ch))
   this.textWriter.Write('\'');
else
   this.WriteEntityRefImpl("apos");

속성 값을 작성할 때는 하나의 견적이 필요하지 않으므로 탈출되지 않습니다. " '"가 사용되는 텍스트 요소를 작성할 때만 가능합니다.

다른 팁

이것은 버그가 아닙니다 XmlWriter, 그것은 당신의 레거시 시스템의 버그입니다.

정의를 보면 AttValue XML 1.0 권장 사항에서 XmlWriter 속성 값이 Apostrophes로 구분되면 속성 값에 인용 표시가 포함될 수 있으며 인용 표시로 구분되면 속성 값에 Apostrophes가 포함될 수 있습니다.

당신은 아마도 수업을 도출 할 수 있습니다 XmlTextWriter 그리고 그것을 무시합니다 WriteAttributes 그리고 WriteAttributeString 행동 양식. 작동 할 수도 있습니다. 그래도 네임 스페이스와 인코딩을 조심하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top