OpenXmlPowerTools空元素自闭合标签不符合HTML规范,如何解决?
解决Linq to XML/OpenXmlPowerTools生成自闭合空标签的问题
不用正则替换,直接通过Linq to XML的API就能解决,核心思路是给空元素添加空文本节点,强制生成非自闭合标签:
创建元素时直接指定空内容
不管是HTML元素还是OpenXML的元素,创建时传入string.Empty或者XText("")即可:// HTML的div例子 var div = new XElement("div", string.Empty); // 输出为 <div></div> 而非 <div/> // OpenXML的tc例子 var tc = new XElement(W.tc, string.Empty); // 输出为 <tc xmlns="http://schemas.openxmlformats.org/wordprocessingml/2006/main"></tc>处理已存在的空元素
如果是已经生成的XML文档里的空元素,可以遍历所有空元素,给它们添加空文本节点:foreach (var emptyElem in yourXmlDoc.Descendants() .Where(e => !e.HasElements && string.IsNullOrEmpty(e.Value))) { emptyElem.Add(string.Empty); }
这种方法比正则替换可靠得多,不会因为XML的命名空间、嵌套结构等问题出现匹配错误。
内容的提问来源于stack exchange,提问作者user19618751
相关产品推荐
相关产品推荐

