好吧,我觉得这很愚蠢.我看到很多类似于我的问题的其他问题,但似乎没有人能够回答它.
我正在为一个非常挑剔的语法程序创建一个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 < a > string &
everything will get encoded</someString>
Run Code Online (Sandbox Code Playgroud)
您应该使用Linq to XML(XDocument等)来解决它.我百分百肯定你可以在没有你所有WriteLine的情况下做到这一点;)向我们展示你的逻辑?
否则你可以使用这将是防弹(而不是.Replace("&")):
var value = "hej&hej<some>";
value = new System.Xml.Linq.XText(value).ToString(); //hej&hej<some>
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参考).