HtmlDocument.Write Stripping кавычки - PullRequest
       0

HtmlDocument.Write Stripping кавычки

4 голосов
/ 14 августа 2011

По какой-то причине, когда я пытаюсь записать в HtmlDocument, он удаляет некоторые (не все) кавычки строки, которую я ему даю.

Смотрите здесь:

HtmlDocument htmlDoc = Webbrowser1.Document.OpenNew(true);
htmlDoc.Write("<HTML><BODY><DIV ID=\"TEST\"></DIV></BODY></HTML>");
string temp = htmlDoc.GetElementsByTagName("HTML")[0].InnerHtml;

Результат temp такой:

<HEAD></HEAD>
<BODY>
<DIV id=TEST></DIV></BODY>

Он работает точно так же, как и должен, за исключением кавычек. У кого-нибудь есть решение о том, как это предотвратить или исправить?

Ответы [ 2 ]

0 голосов
/ 14 августа 2011

Нет никаких гарантий с innerHTML, что он вернет содержимое, идентичное строке, которую вы передали. Внутренний HTML создается браузером с использованием его представления в виде HTML-дерева - поэтому он будет генерировать результирующую строку так, как считает нужным.

Таким образом, в зависимости от ваших потребностей, вы можете попытаться использовать некоторый HTML-код для разбора, который распознает идентификаторы без кавычек, ИЛИ попытаться убедить браузер использовать новейший движок, который с большей вероятностью будет создавать innerHTML по вашему вкусу.

т.е. в вашем случае похоже, что по крайней мере IE9 отображает ваш HTML как IE9: режим Quirks (который возвращает innerHTML в форме, которой вы не довольны), если вы сделаете правильный HTML или принудительный режим для IE9: стандартным вы получите строку с qoutes как

document.getElementsByTagName("html")[0].innerHTML 

IE9: Стандарты - "<head></head><body><div id="TEST"></div></body>"

IE9: Причуды -

"<HEAD></HEAD>
<BODY>
<DIV id=TEST></DIV></BODY>" 

Вы можете попробовать сами, создав образец HTML-файла и открыв его с диска. F12 для отображения инструментов разработчика и режима проверки в строке меню.

0 голосов
/ 14 августа 2011

C # имеет причудливую особенность, хотя я не уверен в его названии.Извините, я не уверен в эквиваленте vb.

Добавьте @ в начале строки литерала, чтобы экранировать все символы.

htmlDoc.Write(@"<HTML><BODY><DIV ID="TEST"></DIV></BODY></HTML>");

Также это не важноно ваш HTML не будет проверять.Все теги и атрибуты должны быть в нижнем регистре.Например, <HTML> должно быть <html>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...