出于某种原因,当我尝试写入HtmlDocument时,它会删除我给它的字符串的一些(不是全部)引号。
看这里:
HtmlDocument htmlDoc = Webbrowser1.Document.OpenNew(true);
htmlDoc.Write("<HTML><BODY><DIV ID=\"TEST\"></DIV></BODY></HTML>");
string temp = htmlDoc.GetElementsByTagName("HTML")[0].InnerHtml;
临时结果如下:
<HEAD></HEAD>
<BODY>
<DIV id=TEST></DIV></BODY>
除了剥离引号外,它的工作原理完全正常。有没有人有解决方法来预防或解决这个问题?
答案 0 :(得分:0)
在文字字符串的开头添加@
以转义所有字符。
htmlDoc.Write(@"<HTML><BODY><DIV ID="TEST"></DIV></BODY></HTML>");
此外,这并不重要,但您的HTML不会验证。所有标签和属性都应为小写。例如,<HTML>
应为<html>
。
答案 1 :(得分:0)
innerHTML无法保证它将返回与您传入的字符串相同的内容.nempleHTML由浏览器使用其HTML树表示构建 - 因此它将生成结果字符串,因为它看起来很合适。
因此,根据您的需要,您可以尝试使用一些HTML解析代码,这些代码可以在没有引号的情况下理解ID,或者试图说服浏览器使用最有可能产生innerHTML的最新引擎。
即。在你的情况下,看起来至少IE9将你的HTML呈现为IE9:Quirks模式(以你不满意的形式返回innerHTML),如果你为IE9制作有效的HTML或强制模式:标准你将获得带有qoutes的字符串像
document.getElementsByTagName("html")[0].innerHTML
IE9:标准 - "<head></head><body><div id="TEST"></div></body>"
IE9:Quirks -
"<HEAD></HEAD>
<BODY>
<DIV id=TEST></DIV></BODY>"
您可以通过创建示例HTML文件并从磁盘打开来自行尝试。 F12在菜单栏中显示开发工具和签出模式。