Проблема с Xmlwriter при написании вложенных элементов

Я пытаюсь использовать Xmlwriter для создания вывода HTML и столкнулся с проблемой, когда HTML не генерируется должным образом.

Мой код выглядит примерно так.

writer.WriteStartElement("div");
writer.WriteAttributeString("class", "test");
writer.Flush();

 //Load other control which write to same stream.
 //other control generate o/p like this <div id=”other control”></div>

writer.WriteFullEndElement();
writer.Flush();

Вывод этого кода генерируется следующим образом.

<div class="test" 
   <div id=”other control”></div>
></div>

Но ожидаемый результат

<div class="test">
   <div id=”other control”></div>
</div>

Кто-нибудь сталкивался с проблемой такого же типа? Какие-либо предложения ?


person user1760384    schedule 06.06.2013    source источник


Ответы (1)


Новичок в программировании, поэтому не уверен в этом

//writer.Flush(); //if you need a flush to come before your control

writer.WriteStartElement("div");

writer.WriteStartAttribute("class");

writer.WriteValue("test"); // OR writer.WriteString("test");

writer.WriteEndAttribute(); //perhaps this way is handled differently. 

writer.WriteStartElement("control");// with no attributes to confuse it you might want to name it div

//then your other control stuff

writer.WriteEndElement();// end of the control element 

writer.WriteEndElement();// end of the div.

writer.Flush();

Я думаю, что WriteEndElement решает, будет ли это /> или >‹/имя_элемента> или >UnknownStuff‹/имя_элемента>, поэтому, если у него есть что-то вроде вашего элемента управления или, может быть, сброса, он не знает, как обращаться с вашим элементом управления. Поскольку последним, что он написал, был атрибут, он считает ваш элемент управления странным атрибутом. Поместив элемент управления в элемент, который можно было бы назвать control или ‹ div >, WriteEndElement может подумать, что это странный элемент.

Представьте, как бы вы могли создать WriteEndElement, если бы писали класс XMLwriter. С чем он будет иметь дело в своем жизненном цикле. Как он узнает, что они больше не должны быть атрибутами, потому что, возможно, вы можете как-то обмануть его.

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

person AlexanderLife    schedule 28.07.2013