В XmlDocument при записи или изменении позже можно удалить самозакрывающиеся теги (т. Е. />
) для определенного элемента.Удаление самозакрывающихся тегов (например, />) в XmlDocument
Например: изменение
<img />
или<img></img>
к<img>
.<br />
до<br>
.
Почему вы спрашиваете? Я пытаюсь соответствовать схеме HTML для Word 2007; итоговый HTML будет отображаться в Microsoft Outlook 2007 или более поздней версии.
После прочтения еще StackOverflow question, я попробовал установить IsEmpty
на false
так.
var imgElements = finalHtmlDoc.SelectNodes("//*[local-name()=\"img\"]").OfType<XmlElement>();
foreach (var element in imgElements)
{
element.IsEmpty = false;
}
Однако это привело к <img />
становится <img></img>
. Кроме того, в качестве взлома я также попытался изменить свойство OuterXml
непосредственно, но это не работает (не ожидал этого).
Вопрос
Вы можете удалить самозакрывающиеся теги XmlDocument
? I честно не думаю, что есть, так как тогда это было бы недопустимым xml (без закрывающего тега), однако я подумал, что я выброшу вопрос из сообщества.
Update:
Я в конечном итоге фиксируя строку HTML после экспорта из XmlDocument
, используя регулярное выражение (написано в замечательной RegexBuddy).
var fixHtmlRegex = new Regex("<(?<tag>meta|img|br)(?<attributes>.*?)/>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
return fixHtmlRegex.Replace(htmlStringBuilder.ToString(), "<$1$2>");
Он очистил многие ошибки от пропусков проверки и позволил мне сосредоточиться на реальных проблемах совместимости.
Использование ' и' '
отлично работает в офисе 2007/10, есть еще одна причина для преобразования в стиле HTML4 теги? – Matthew
глядя на ответы, которые вы знаете, вы не можете сделать это через XMLDocument. Но если вы действительно этого хотите, почему бы вам не попробовать создать текстовый файл со строковыми операциями в XML, таким образом вы сможете достичь своей задачи. – Habib
@Matthew: Да, они делают; единственная причина заключалась в том, чтобы утвердить схему [HTML для Word 2007] (http://msdn.microsoft.com/en-us/library/aa338201%28office.12%29.aspx), чтобы в более поздней точке преобразование могло быть протестированным. – Dennis