首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XAttribute维护CR

XAttribute维护CR
EN

Stack Overflow用户
提问于 2018-05-11 09:49:17
回答 1查看 30关注 0票数 0

我有一个KVP的数据,我想在我的XAttribute,这是这样的;

代码语言:javascript
复制
var kvpAttribute = new KeyValuePair<string,string>("rsaKey", @"----RSAKEY----
AWEACAWE123213AWEAWECAWE!AWEAWE
AWEAWEAWEAWEAWEQEAWEAWHYTAWEAAA
----END RSA KEY ----");

(移除实际钥匙)

我正在尝试把它写到XML文件中。读取此XML的程序在使用以下方法编写该键时,需要将该键格式化为文件中的键(在行之间使用CR );

代码语言:javascript
复制
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中得到了输出;

代码语言:javascript
复制
<add value="----RSAKEY---&#xD;&#xA;AWEACAWE123213AWEAWECAWE!AWEAWE&#xD;&#xA;AWEAWEAWEAWEAWEQEAWEAWHYTAWEAAA&#xD;&#xA;----END RSA KEY ----" key="rsaKey"/>

(再次移除实际密钥)

如您所见,CR被CR/LF替换( ;

;)。

是否有一种方法来维护从KVP到XML文件本身的格式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-11 09:57:33

我强烈怀疑这是因为您的字符串实际上有CR/LF开始。

假设您的代码实际上使用了一个逐字字符串,如下所示:

代码语言:javascript
复制
// Note the @
var kvpAttribute = new KeyValuePair<string,string>("rsaKey", @"----RSAKEY----
AWEACAWE123213AWEAWECAWE!AWEAWE
AWEAWEAWEAWEAWEQEAWEAWHYTAWEAAA
----END RSA KEY ----");

..。源文件的行尾将被传播到文字中。

“修复”的最简单方法是将字符串中的"\r“替换为”\r“:

代码语言:javascript
复制
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":

代码语言:javascript
复制
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);
    }
}

输出:

代码语言:javascript
复制
<foo key="a&#xD;b" />

这是包含回车返回的属性值的XML表示。如果你期待:

代码语言:javascript
复制
<foo key="a
b" />

..。然后,尽管它看起来是有效的XML (这让我感到惊讶),我相信它实际上将由一个符合XML的读取器来处理,就好像它是:

代码语言:javascript
复制
<foo key="a b" />

因此,与其维护回车,不如用空格替换它们:

代码语言:javascript
复制
rsaKey = rsaKey.Replace("\r\n", "\r").Replace("\r", " ");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50289588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档