这是一些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()
我得到的字符串看起来像:
它只是逃避双引号,而不是单引号.但是XmlWriter.WriteAttributeString(String,String)的文档说:
如果属性值包括双引号或单引号,则将它们替换为" 和 分别.
我需要设置一些标志,以使其按照文档所说的那样做吗?
如果使用.Net Reflector查看代码,您会发现正在调用System.Xml.XmlTextEncoder.Write(string)方法.这是感兴趣的代码:
if (!this.inAttribute || (this.quoteChar != ch)) this.textWriter.Write('\''); else this.WriteEntityRefImpl("apos");
在编写属性值时,单个引号不会被转义,因为它不需要.只有当写一个文本元素时才会出现"'".用来.