将空XML元素渲染为父元素
我有一个奇怪的要求,即我的应用程序生成的消耗一些XML的应用程序实际上需要将空元素序列化为父元素。 例如:
应该:
我不知道XmlSerializer允许你改变它的任何方式。 有谁知道如何做到这一点?
我扩展了XmlTextWriter,以便我可以覆盖WriteEndElement()方法,强制它调用WriteFullEndElement()。 这样做了。
注意:对于任何看到我的问题更新的人,请忽略。 IE以简写forms呈现XML。 当我在记事本中打开它时,我意识到一切正常。
public class FullEndingXmlTextWriter : XmlTextWriter { public FullEndingXmlTextWriter(TextWriter w) : base(w) { } public FullEndingXmlTextWriter(Stream w, Encoding encoding) : base(w, encoding) { } public FullEndingXmlTextWriter(string fileName, Encoding encoding) : base(fileName, encoding) { } public override void WriteEndElement() { this.WriteFullEndElement(); } }
您可以使用正则表达式解决它,使其成为两遍过程。
string xml = "element foo=\"bar\" />" string pattern = @"<(?\w+)(?\b.*)/>"; string substitute = @"<${elem} ${body}>${elem}>"; Regex regex = new Regex(pattern); string goodresult = regex.Replace(xml, substitute);
Scott Hanselman写了一篇关于从XML中删除空元素的文章,并且一目了然,代码可以用于您的目的,只需对空元素的处理进行一些小改动。 他还解释了为什么使用RegEx是一个坏主意。
我指出这一点,因为我不知道如何让XmlSerializer做你想做的事。
另一种可能性,虽然我对WPF并不是很了解,但是使用XAML序列化程序 – 请查看System.Window.Markup命名空间文档。