xmlwriter는 한 종류의 인용문 만 탈출합니다
문제
다음은 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 ' " !" />
단일 쿼트가 아니라 이중 쿼트를 피하는 것입니다. 그러나 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
행동 양식. 작동 할 수도 있습니다. 그래도 네임 스페이스와 인코딩을 조심하십시오.
제휴하지 않습니다 StackOverflow