替换&与& 在C#中

Ian*_*mer 5 c# string

好吧,我觉得这很愚蠢.我看到很多类似于我的问题的其他问题,但似乎没有人能够回答它.

我正在为一个非常挑剔的语法程序创建一个xml文件.可悲的是,我从头开始制作XML文件.意思是,我将每一行单独放置(大量的file.WriteLine(String)).

我知道这很难看,但这是我能够找到逻辑的唯一方法.

无论如何.我有一些字符串在其中带有'&'.

if (value.Contains("&"))
   {
      value.Replace("&", "&");
   }
Run Code Online (Sandbox Code Playgroud)

似乎没有用.value.Contains()似乎看到它,但替换不起作用.我正在使用C#.Net 2.0 sp2.VS 2005.

请帮帮我..这是一个漫长的一周..

Jus*_*ner 30

如果你真的想要去那条路线,你必须将结果Replace(该方法返回一个新的字符串,因为字符串是不可变的)分配给变量:

value = value.Replace("&", "&");
Run Code Online (Sandbox Code Playgroud)

我建议重新考虑你编写XML的方式.如果切换到使用XmlTextWriter,它将为您处理所有编码(不仅是&符号,还有所有需要编码的其他字符):

using(var writer = new XmlTextWriter(@"C:\MyXmlFile.xml", null))
{
    writer.WriteStartElement("someString");
    writer.WriteText("This is < a > string & everything will get encoded");
    writer.WriteEndElement();
}
Run Code Online (Sandbox Code Playgroud)

应该产生:

<someString>This is &lt; a &gt; string &amp; 
    everything will get encoded</someString>
Run Code Online (Sandbox Code Playgroud)


Las*_*olt 8

您应该使用Linq to XML(XDocument等)来解决它.我百分百肯定你可以在没有你所有WriteLine的情况下做到这一点;)向我们展示你的逻辑?

否则你可以使用这将是防弹(而不是.Replace("&")):

var value = "hej&hej<some>";
value = new System.Xml.Linq.XText(value).ToString(); //hej&amp;hej&lt;some&gt;
Run Code Online (Sandbox Code Playgroud)

这也将照顾<你也必须逃避:)

更新:我已经查看了代码,XText.ToString()并在内部创建了一个XmlWriter+ StringWriter并使用XNode.WriteTo.对于给定的应用程序来说这可能是过度的,所以如果要转换许多字符串,XText.WriteTo那就更好了.一个应该快速和依赖的替代方案是System.Web.HttpUtility.HtmlEncode.

更新2:我发现这System.Security.SecurityElement.Escape(xml)可能是最快的并且确保最大兼容性(从.Net 1.0开始支持并且不需要System.Web参考).