我的客户遇到了一个奇怪的问题 - 我正在阅读带有 XmlSerializer
的 XML 文档(实际上是 InfoPath 文档) ,修改它,然后使用 XmlSerializer
写出 XML 文档,然后使用 XmlTextWriter
添加一些处理指令。一切运行良好,生成的文档实际上完全符合 XML,并且可以由 InfoPath 读取。然而,结构中发生的一个变化是原始文档的所有空标签都以 <A></A>
的形式编写。 ,当我的文档写完后,它就变成 <A/>
。由于 XML 标准,实际上完全相同。但是,我的客户(一家大公司)显然有一些硬编码的检查/验证脚本 <A></A>
,他们失败了。他现在很沮丧,懒得改变他的脚本,并且想要 <A></A>
符号!我该如何设置XmlTextWriter
去做吧?
最佳答案
您可以通过提供XmlSerializer
来做到这一点与您自己的XmlWriter
后代,这将覆盖 WriteEndElement
method 。默认情况下,此方法会生成一个空元素 ( <a />
) 或一个结束元素 ( </a>
),具体取决于要输出的元素的内容。您可以更改行为以始终生成完整的结束元素。
public class MyXmlWriter : XmlTextWriter
{
// …constructors etc. omitted for the sake of simplicity…
public override void WriteEndElement()
{
// this should do the trick
WriteFullEndElement();
}
}
但是,还需要做一些更多的工作,例如Async
这个方法的版本,但原则上,它应该很容易像上面那样实现。我建议查看the source code的XmlTextWriter.WriteEndElement
并得出更适合您的情况的版本。
关于C# System.Xml.Serialization - 仅使用 <a></a> 而从不使用 <a/>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54999461/