C# System.Xml.Serialization - 仅使用 <a></a> 而从不使用 <a/>

标签 c# xml xml-serialization xmlserializer xmltextwriter

我的客户遇到了一个奇怪的问题 - 我正在阅读带有 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 codeXmlTextWriter.WriteEndElement并得出更适合您的情况的版本。

关于C# System.Xml.Serialization - 仅使用 <a></a> 而从不使用 <a/>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54999461/

相关文章:

c# - 在 C# 中通过反序列化将 xml 转换为列表

java - 简单的 xml 和具有相同名称但不同命名空间的元素

c# - 如何设置与单击一次应用程序的文件关联?

c# - 为什么 lambda 表达式不是 "interned"?

xml - 什么是官方 XML 保留字符?

iphone - 需要解决方案将 XML 作为对象或 iPhone 应用程序中的对象存储

Java Regex 检查字符串是否包含 XML 标记

c# - XmlSerializer 抛出 InvalidOperationException

java - 使用 xstream 填充列表值

c# - 使用传入的函数对 List<T> 进行排序