显然,在VB的XML文本中,CR-LF组合会被静默地转换为LF。考虑以下最简代码示例:
不是...而是...
Module Module1
Sub Main()
Dim x As XElement = <xml>1
2</xml>
' Print Bytes
Console.WriteLine(String.Join("-", x.Value.Select(Function(c) AscW(c).ToString("X2"))))
End Sub
End Module
使用Visual Studio 2017 (Framework 4.5.2)编译,可以得到如下结果:
31-0A-32
不是...而是...
31-0D-0A-32
正如我所预期的那样。我使用二进制编辑器检查了源文件,确实在 xml 字面量的第 1 和第 2 行之间包含 CR-LF (0D-0A)。
这是官方文档记录的行为还是只是我不能依赖于我的编译器的某些实现细节?如果是前者,请问它在哪里记录?
Dim x as New XElement("xml", "1" & vbCrLf & "2")
。当然,这种方式更加繁琐。 - MarkL.Replace(vbLf, vbCrLf)
,但如果VB对XML文字的处理方式发生变化(因此我在这里提出问题),这将会出现严重错误。 - Heinzi