KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I had a look at string escape into XML and found it very useful. I would like to do a similar thing: Escape a string to be used in an XML-Attribute. The string may contain \r\n. The XmlWriter class produces something like \r\n -> 
 The solution I'm currently using includes the XmlWriter and a StringBuilder and is rather ugly. Any hints? Edit1: Sorry to disappoint LarsH, buy my first approach was public static string XmlEscapeAttribute(string unescaped) { XmlDocument doc = new XmlDocument(); XmlAttribute attr= doc.CreateAttribute("attr"); attr.InnerText = unescaped; return attr.InnerXml; } It does not work. XmlEscapeAttribute("Foo\r\nBar") will result in "Foo\r\nBar" I used the .NET Reflector, to find out how the XmlTextWriter escapes Attributes. It uses the XmlTextEncoder class which is internal... My method I'm currently usig lokks like this: public static string XmlEscapeAttribute(string unescaped) { if (String.IsNullOrEmpty(unescaped)) return unescaped; XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; StringBuilder sb = new StringBuilder(); XmlWriter writer = XmlWriter.Create(sb, settings); writer.WriteStartElement("a"); writer.WriteAttributeString("a", unescaped); writer.WriteEndElement(); writer.Flush(); sb.Length -= "\" />".Length; sb.Remove(0, "<a a=\"".Length); return sb.ToString(); } It's ugly and probably slow, but it does work: XmlEscapeAttribute("Foo\r\nBar") will result in "Foo
Bar" Edit2: SecurityElement.Escape(unescaped); does not work either. Edit3 (final)
Tags (comma-separated)
Save Edits
Cancel