[英]Escaping ONLY contents of Node in XML
我有一部分代码如下所述。
//Reading from a file and assign to the variable named "s"
string s = "<item><name> Foo </name></item>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(s);
但是,如果内容中包含“ <”,“>” .. etc等字符,它将停止工作。
string s = "<item><name> Foo > Bar </name></item>";
我知道,在加载之前我必须先转义这些字符,但是,如果我喜欢
doc.LoadXml(System.Security.SecurityElement.Escape(s));
,标记(<,>)也被转义,结果发生错误。
我怎么解决这个问题?
假设您的内容永远不会包含字符“]]>”,则可以使用CDATA。
string s = "<item><name><![CDATA[ Foo > Bar ]]></name></item>";
否则,您将需要对特殊字符进行html编码,并在使用/显示特殊字符之前对其进行解码(除非它在浏览器中)。
string s = "<item><name> Foo > Bar </name></item>";
将字符串的内容分配给节点的InnerXml
属性。
var node = doc.CreateElement("root");
node.InnerXml = s;
看一下- 如何在C#中转义XML字符串的不同方法
一个棘手的解决方案:
string s = "<item><name> Foo > Bar </name></item>";
s = Regex.Replace(s, @"<[^>]+?>", m => HttpUtility.HtmlEncode(m.Value)).Replace("<","ojlovecd").Replace(">","cdloveoj");
s = HttpUtility.HtmlDecode(s).Replace("ojlovecd", ">").Replace("cdloveoj", "<");
XmlDocument doc = new XmlDocument();
doc.LoadXml(s);
看起来您生成的字符串是字符串,而不是有效的XML。 您既可以获取作为有效XML生成的字符串,也可以获取已知的字符串,而不必在数据中包含XML <item>
和<name>
标记。
然后,当您创建XMLDocument
。 在保存结果之前执行CreateElement
并分配您的字符串。
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("item");
doc.AppendChild(root);
XmlElement name = doc.CreateElement("name");
name.InnerText = "the contents from your file";
root.AppendChild(name);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.