【发布时间】:2012-04-11 18:34:55
【问题描述】:
在 XmlDocument 中,无论是在以后编写和修改时,是否可以删除某个元素的自闭合标签(即/>)。
例如:改变
-
<img />或<img></img>到<img>。 -
<br />到<br>。
你为什么问?我正在尝试符合 Word 2007 的 HTML 架构;生成的 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>。此外,作为 hack,我还尝试直接更改 OuterXml 属性,但这不起作用(没想到会这样)。
问题
你能从XmlDocument 中删除自闭标签吗?我老实说不认为有,因为这将是无效的 xml(没有结束标记),但我认为我会将这个问题抛出社区。p>
更新:
在使用正则表达式(写在美妙的RegexBuddy)从XmlDocument 导出后,我最终修复了HTML 字符串。
var fixHtmlRegex = new Regex("<(?<tag>meta|img|br)(?<attributes>.*?)/>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
return fixHtmlRegex.Replace(htmlStringBuilder.ToString(), "<$1$2>");
它清除了验证过程中的许多错误,让我可以专注于真正的兼容性问题。
【问题讨论】:
-
在 Office 2007/10 中使用
<img />和<br />可以正常工作,是否还有其他原因需要转换为 HTML4 样式标签? -
看你知道的答案,通过XMLDocument是做不到的。但是如果你真的想要这个,你为什么不尝试在XML上创建一个带有字符串操作的文本文件,这样你就可以完成你的任务
-
@Matthew:是的。唯一的原因是针对HTML for Word 2007 模式进行验证,以便稍后可以对转换进行单元测试。
-
我相信htmlagilitypack.codeplex.com支持另存为HTML4合规性,这会给你
<img>短标签。 -
谢谢@Matthew。 ...您使用 HTML Agility 包的体验如何?快速浏览项目会发现很少的文档或示例。