我有一个xml文件,我正在使用linq-to-XML来读取。 Linq-to-XML保留了换行的换行符和空格。
所以不要像这样的指导:
"FB5417E2-DB15-481d-80D6-D0C4CB26EB1F"
我得到这样的东西:
"\n FB5417E2-DB15-481d-80D6-D0C4CB26EB1F"
我已尝试使用此方法来帮助弥补这一点:
public static string ValueTrimmed(this XElement element)
{
if (element != null)
// Remove the newlines and spaces
return element.Value.Replace("\n ", "");
return "";
}
问题是这只适用于“\ n”+6个空格。
有没有办法删除“\ n”+任意数量的空格?
注意:我有一些场景,其中“\ n”+ x空格位于值的内部 例如:
TextTextTextTextTextTextText\n TextTextTextTextTextTextText
答案 0 :(得分:7)
删除所有换行后跟空格:
return Regex.Replace(element.Value, @"\n\s*", String.Empty);
如果要在行之间保留单个空格:
return Regex.Replace(element.Value, @"\n\s*", " ").Trim();
答案 1 :(得分:4)
您可以尝试使用string.Trim
删除所有前导和尾随空格:
return element.Value.Trim();
答案 2 :(得分:3)
使用相应的XDocument
创建LoadOptions
时,请指定是否保留空白区域,而不是摆弄正则表达式:
保留空白区域
var xdoc1 = XDocument.Parse("<root>\r\n</root>", LoadOptions.PreserveWhitespace);
var xdoc2 = XDocument.Load(@"\path\to\xml", LoadOptions.PreserveWhitespace);
忽略空格:
var xdoc1 = XDocument.Parse("<root>\r\n</root>", LoadOptions.None);
var xdoc2 = XDocument.Load(@"\path\to\xml", LoadOptions.None);
答案 3 :(得分:1)
string result = input
.Replace("\\n", String.Empty) // replace escaped \n with nothing
.Trim(); // removing leading (and trailing) spaces
或(尝试,不确定)
string result = input.Trim(new[] { '\n' });
答案 4 :(得分:0)
在这里输入代码如果是你,在外部if中,如果检查“\ n”则返回另一个,如果返回true,则在循环中检查“\”或“n”或“”并替换为“”。< / p>
在伪代码中基本上是这样的......
if (string != null) //check if string is not null
{
if ((string.indexOf(0) == "\\") && (string.indexOf(1) == "n")) //check if string begins with \n
{
for (int i = 0; i < string.length; i++) \\since string begins with "\n" iterate until each character is neither "\", "n", " " and replace each one of those with ""
{
if((string.indexOf(i) == "\\") || (string.indexOf(i) == "n") || (string.indexOf(i) == " "))
string.indexOf(i) = "";
}
}
}
不好意思,这可能有点乱,有些语法可能稍微偏离,但是你得到了这个。