在一个字符串中,换行和空格变成 =""

In a string, new lines and spaces become =""

我正在尝试将从文件中读取的文本存储到字符串变量中:

using HtmlAgilityPack;

// .
// .
// some other code
// .
// .

// The following line's output is as expected. The contents of the file is printed to the console. 
Console.Write( File.ReadAllText( parentFolder + @"\" + file ) );

// (storing the text in a variable)
node.InnerHtml = File.ReadAllText( parentFolder + @"\" + file );

// The output of the following line is different. The spaces and new lines become ="" (equal symbol + 2 sets of quotation marks + a space)
Console.Write( node.InnerHtml );


// example output of Console.Write( File.ReadAllText( parentFolder + @"\" + file ) );
// 'use strict';
//
// module.exports = somevariable;

// example output of Console.Write( node.InnerHtml );
// 'use="" strict';="" module.exports="somevariable;

这可能是什么原因造成的?如何解决?

你的问题是换行符(在 \n 或 \r\n 的意义上)和白色 space 一般而言,对于 HTML 没有什么意义,因为它们浏览器不会将其呈现为单个 space。因此 <div>a b</div> 将呈现为与 <div>a b</div> 相同,等等。似乎 HtmlAgilityPack 只是在整理您提供的“HTML”(实际上是 Javascript 代码)。

如果我理解正确的话,您似乎想将一些代码应用到 HTML 中的标签(例如 script 标签)。为此,我们需要将代码视为文本并构造一个文本节点:

string script = File.ReadAllText( parentFolder + @"\" + file );
HtmlTextNode textNode = doc.CreateTextNode(script);

然后我们可以将其作为子节点附加到相关节点:

node.AppendChild(textNode);

这将在您的文本文件中保留换行符,因为我们没有错误地声明它是 HTML。

Try it online

P.S。如果节点中存在现有文本,您可能必须先将其清除。您可以通过调用以下代码 before .AppendChild(textNode);:

scriptNode.RemoveAllChildren();