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

C# 如何在C中转义XML字符串中的无效字符#,c#,xml,C#,Xml,我有一个C#格式的XML字符串。这个XML有几个标记。在其中一些标记中,文本中存在无效字符,如“&”。我需要从整个长XML字符串中转义文本中的这些字符,但我希望保留标记 我尝试了HttpUtility.HtmlEncode和其他一些可用的方法,但它们编码整个字符串,而不仅仅是标记中的文本。示例标记包括 这是一个字符串,因此应将其转换为 <node1>This is a string &amp; so is this</node1> 这是一个字符串&;这也是

我有一个C#格式的XML字符串。这个XML有几个标记。在其中一些标记中,文本中存在无效字符,如“&”。我需要从整个长XML字符串中转义文本中的这些字符,但我希望保留标记

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

这是一个字符串,因此应将其转换为

<node1>This is a string &amp; so is this</node1>
这是一个字符串&;这也是
有什么想法吗?谢谢


另外,我知道在我还没有找到这个问题的完整解决方案之前,也有人问过类似的问题

您可以使用CDATA字段,如下所示:

<YourXml>
 <Id>1</Id>
 <Content>
    <![CDATA[
           your special caracteres
     ]]>
 </content>
</yourXml>

1.

您可以使用CDATA字段,如下所示:

<YourXml>
 <Id>1</Id>
 <Content>
    <![CDATA[
           your special caracteres
     ]]>
 </content>
</yourXml>

1.

我想最简单的解决方案是将整个Xml文档作为XmlDocument加载到内存中,然后遍历元素并用html编码的形式替换值。

我想最简单的解决方案是将整个Xml文档作为XmlDocument加载到内存中,然后遍历元素并用他们的html编码形式。

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

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

我不明白这有什么大不了的。当您将整个xml作为一个字符串时,实现所需内容的最简单方法是使用Replace函数

例如,整个xml都在字符串str中,那么您所要做的就是

str.Replace("&" , "&amp;");

就是这样,伙计。你已经实现了你想要的一切。有时,对于大问题存在非常简单的解决方案。希望这对你有帮助。

我不明白这有什么大不了的。当您将整个xml作为一个字符串时,实现所需内容的最简单方法是使用Replace函数

例如,整个xml都在字符串str中,那么您所要做的就是

str.Replace("&" , "&amp;");
就是这样,伙计。你已经实现了你想要的一切。有时,对于大问题存在非常简单的解决方案。希望这对您有所帮助。

这可能会有帮助:这可能会有帮助: