C# HAP解析HTML文档中的格式
我使用以下代码从HTML文档中提取节点:C# HAP解析HTML文档中的格式,c#,html-agility-pack,C#,Html Agility Pack,我使用以下代码从HTML文档中提取节点: var nodeCollection = doc.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/div[2]"); HTML文档使用一些基本格式进行格式化,以增加Notepad++的可读性。HAP似乎正在解析此格式(一个新行和一些制表符缩进),并在返回的HTMLNode的innerHTML和innerText属性中返回它们: 我能在不改变输入文件的情况下缓解这种情况吗 免责声明:我是项目的所有者 i
var nodeCollection = doc.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/div[2]");
HTML文档使用一些基本格式进行格式化,以增加Notepad++的可读性。HAP似乎正在解析此格式(一个新行和一些制表符缩进),并在返回的HTMLNode的innerHTML
和innerText
属性中返回它们:
我能在不改变输入文件的情况下缓解这种情况吗 免责声明:我是项目的所有者 innerHtml innerHtml做它应该做的事情。它显示HTML,包括所有HTML标记、空格、制表符和新行 因此,对于这一个,它的工作如预期 内部文本 对于这样的标签
DIV
,它应该不显示空格、制表符或新行
所以对于innerText,有一个bug
我已将此请求添加到我们的路线图中,并希望在下周一之前提供修复。当答案可用时,我将对其进行编辑
编辑:添加发布通知
自1.6.2版以来,改进了InnerText
属性,以删除换行符、空格和制表符。在未来的版本中将有更多的改进,以更好地处理某些样式属性,这些属性也会影响InnerText
但是,新的
InnerText
逻辑只有在将BackwardCompatibility设置为false时才可用,因为此更改对当前使用此库的用户有非常大的影响:new HtmlDocument(){BackardCompatibility=false}
您是否尝试过.Trim()
或者我误解了您的问题?@ManfredRadlwimmer这不一定有帮助,因为我需要添加到HTML中,然后重新插入到文档中。在不缓解当前解析问题的情况下,节点的内容可能会以与预期结果不一致的方式更改最终文档的外观,特别是如果我需要更改节点的属性而不仅仅是其中的文本。到目前为止,您做了哪些尝试?我只需要手动解析所有前导和尾随的空白字符,将它们存储在一对字符串中,进行所需的任何更改,然后将它们添加回修改后的字符串中。@ManfredRadlwimmer说实话,我认为这是HAP的一个错误。我是否正确地假设HAP解析文件的文本内容,然后简单地从中提取HTML元素?我不知道您的HTML实际上是什么样子,但如果制表符和换行符与您得到的完全一样,这绝不是HAP的错。解析器不应该修改它正在读取的任何内容,并且它无法知道空白的用途。简而言之,这不是一个bug,而是一个特性。如果您自己制作HTML,我建议不要在您计划解析的HTML标记中添加不需要的空格。