如何在C#中转义XML字符串中的无效字符

时间:2014-02-25 16:27:46

标签: c# xml

我在C#中有一个XML字符串。这个XML有几个标签。在其中一些代码中,文字中包含'&'等无效字符。我需要从整个长XML字符串中删除文本中的这些字符,但我想保留标记。

我尝试了HttpUtility.HtmlEncode和其他一些可用的方法,但是它们编码整个字符串,而不仅仅是标记内的文本。示例标签是

<node1>This is a string & so is this</node1>应转换为

<node1>This is a string &amp; so is this</node1>

有什么想法吗?感谢

P.S。我知道在找不到这个问题的完整解决方案之前,已经问过类似的问题。

4 个答案:

答案 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("&" , "&amp;");
是的,那是男人。你已经取得了你想要的一切。有时候,存在大问题的非常简单的解决方案。希望这对你有所帮助。

答案 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();
}