我有一个KVP的数据,我想在我的XAttribute,这是这样的;
var kvpAttribute = new KeyValuePair<string,string>("rsaKey", @"----RSAKEY----
AWEACAWE123213AWEAWECAWE!AWEAWE
AWEAWEAWEAWEAWEQEAWEAWHYTAWEAAA
----END RSA KEY ----");(移除实际钥匙)
我正在尝试把它写到XML文件中。读取此XML的程序在使用以下方法编写该键时,需要将该键格式化为文件中的键(在行之间使用CR );
var element = new XElement("Blah");
var attribute = new XAttribute("key", kvpAttribute.Key);
var attribute2 = new XAttribute("value", kvpAttribute.Value);然后使用XDocument.Save(FolderPath,FileName)保存XDocument.Save,我在XML中得到了输出;
<add value="----RSAKEY---
AWEACAWE123213AWEAWECAWE!AWEAWE
AWEAWEAWEAWEAWEQEAWEAWHYTAWEAAA
----END RSA KEY ----" key="rsaKey"/>(再次移除实际密钥)
如您所见,CR被CR/LF替换( ;
;)。
是否有一种方法来维护从KVP到XML文件本身的格式?
发布于 2018-05-11 09:57:33
我强烈怀疑这是因为您的字符串实际上有CR/LF开始。
假设您的代码实际上使用了一个逐字字符串,如下所示:
// Note the @
var kvpAttribute = new KeyValuePair<string,string>("rsaKey", @"----RSAKEY----
AWEACAWE123213AWEAWECAWE!AWEAWE
AWEAWEAWEAWEAWEQEAWEAWHYTAWEAAA
----END RSA KEY ----");..。源文件的行尾将被传播到文字中。
“修复”的最简单方法是将字符串中的"\r“替换为”\r“:
string rsaKey = @"----RSAKEY----
AWEACAWE123213AWEAWECAWE!AWEAWE
AWEAWEAWEAWEAWEQEAWEAWHYTAWEAAA
----END RSA KEY ----";
rsaKey = rsaKey.Replace("\r\n", "\r");
var kvpAttribute = new KeyValuePair<string,string>("rsaKey", rsaKey);到那时,我希望一切都会好起来。作为一个示例,可以证明XAttribute可以只使用"\r":
using System;
using System.Xml.Linq;
public class Program
{
public static void Main()
{
var element = new XElement("foo", new XAttribute("key", "a\rb"));
Console.WriteLine(element);
}
}输出:
<foo key="a
b" />这是包含回车返回的属性值的XML表示。如果你期待:
<foo key="a
b" />..。然后,尽管它看起来是有效的XML (这让我感到惊讶),我相信它实际上将由一个符合XML的读取器来处理,就好像它是:
<foo key="a b" />因此,与其维护回车,不如用空格替换它们:
rsaKey = rsaKey.Replace("\r\n", "\r").Replace("\r", " ");https://stackoverflow.com/questions/50289588
复制相似问题