我在C#中有一个XML字符串。这个XML有几个标签。在其中一些代码中,文字中包含'&'等无效字符。我需要从整个长XML字符串中删除文本中的这些字符,但我想保留标记。
我尝试了HttpUtility.HtmlEncode
和其他一些可用的方法,但是它们编码整个字符串,而不仅仅是标记内的文本。示例标签是
<node1>This is a string & so is this</node1>
应转换为
<node1>This is a string & so is this</node1>
有什么想法吗?感谢
P.S。我知道在找不到这个问题的完整解决方案之前,已经问过类似的问题。
答案 0 :(得分:2)
我想最简单的解决方案是将整个Xml文档作为XmlDocument加载到内存中,然后浏览元素并用html编码形式替换值。
答案 1 :(得分:1)
您可以使用CDATA字段,如下所示:
<YourXml>
<Id>1</Id>
<Content>
<![CDATA[
your special caracteres
]]>
</content>
</yourXml>
答案 2 :(得分:1)
我不知道这有什么大不了的。当您将整个xml作为字符串时,实现您想要的最简单方法是使用Replace函数。
例如,整个xml在字符串str中,那么你所要做的就是,
str.Replace("&" , "&");
是的,那是男人。你已经取得了你想要的一切。有时候,存在大问题的非常简单的解决方案。希望这对你有所帮助。
答案 3 :(得分:0)
XDocument或XmlDocument是一种方法。如果出于控制原因,你需要在XmlElement中编码文本块:
using System.Text;
using System.Xml;
static string EncodeText(string unescapedText) {
if (string.IsNullOrEmpty(unescapedText)) {
return unescapedText;
}
var builder = new StringBuilder(unescapedText.Length);
using (var writer = XmlTextWriter.Create(builder, new XmlWriterSettings {
ConformanceLevel = ConformanceLevel.Fragment
})) {
writer.WriteValue(unescapedText);
}
return builder.ToString();
}