HtmlDocument.Write剥离引号

时间:2011-08-13 20:38:54

标签: c# html browser dom

出于某种原因,当我尝试写入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>

除了剥离引号外,它的工作原理完全正常。有没有人有解决方法来预防或解决这个问题?

2 个答案:

答案 0 :(得分:0)

虽然我不确定它的名字,但是C#有一个古怪的功能。对不起,我不确定vb等价物。

在文字字符串的开头添加@以转义所有字符。

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在菜单栏中显示开发工具和签出模式。