我正在从文本框中将XML数据传递到服务器,现在问题是XML正在出现像&这样的符号问题。 < |。所以我想用等效的代码替换这些符号。
如果我使用string.replace函数,它将替换最近替换的字符。
.Replace("&", "&")
.Replace("<", "<")
.Replace("|", "|")
.Replace("!", "!")
.Replace("#", "#")
一遍又一遍地完成整个字符串。
所以&amp;&lt;#将成为&#34; &#38;&#60;
&#34;
我也尝试过Dictionary方法:
var replacements = new Dictionary<string, string>
{
{"&", "&"},
{"<", "<"},
{"|", "|"},
{"!", "!"},
{"#", "#"}
}
var output = replacements.Aggregate(input, (current, replacement) => current.Replace(replacement.Key, replacement.Value));
return output;
但同样的问题也在这里。我也尝试过字符串构建器方法,但同样重复替换问题。任何建议?
答案 0 :(得分:2)
您不应该尝试手动转义字符。已经构建了用于执行此操作的库和方法SecurityElement.Escape()
。它专门将无效的XML字符转换为以后可以转义的已知安全格式。
答案 1 :(得分:0)
我强烈建议使用正确的XML处理来构建XML:
var id = 3;
var message = "&'<crazyMessage&&";
var xmlDoc = new XmlDocument();
using(var writer = xmlDoc.CreateNavigator().AppendChild())
{
writer.WriteStartElement("ROOT");
writer.WriteElementString("ID", id.ToString());
writer.WriteStartElement("INPUT");
writer.WriteElementString("ENGMSG", message);
writer.WriteEndElement(); // INPUT
writer.WriteEndElement(); // ROOT
}
var xmlString = xmlDoc.InnerXml;
Console.WriteLine(xmlString);
如果您使用的是.NET 3.5或更高版本,则可以使用Linq2Xml构建XML,这样更清晰:
var id = 3;
var message = "&'<crazyMessage&&";
var xml = new XElement("ROOT",
new XElement("ID", id),
new XElement("INPUT",
new XElement("ENGMSG", message)
)
);
var xmlString = xml.ToString();
Console.WriteLine(xmlString);
答案 2 :(得分:-3)
public static string Transform(string input, Dictionary<string, string> replacements)
{
string finalString = string.Empty;
for (int i = 0; i < input.Length; i++)
{
if (replacements.ContainsKey(input[i].ToString()))
{
finalString = finalString + replacements[input[i].ToString()];
}
else
{
finalString = finalString + input[i].ToString();
}
}
return finalString;
}