access(mdb)转复杂XML

需求:

access转复杂xml结构,非原始mdb字段结构直接生成xml

截取部分xml示例,要求winform、节点顺序及属性需一模一样


1、方案一:xmlserializer 序列化

1.1将各个节点转换为对应结构的实体类,应用特性有

[XmlElement("source-id")]:标记改字段节点名称 source-id

[XmlElement("issn", Namespace = "http://jats.nlm.nih.gov/archiving/1.1/xsd", IsNullable = false)]:标记改字段节点名称,Namespace 参数根据参数不同可以添加节点前的标记,此处生成节点名为jats:issn

[XmlAttribute("source-id-type")]:节点属性

[XmlText]:节点值

[XmlRoot("records", Namespace = "http://spec.nstl.gov.cn/namespace", IsNullable = false)]:声明该类映射命名空间,对应xmlns:


1.2序列化类实例为XML,并生成文件  

/// <summary>  
        /// 序列化类实例为XML,并生成文件  
        /// </summary>  
        /// <typeparam name="T"></typeparam>  
        /// <param name="obj"></param>  
        /// <returns></returns>  
        public static void SaveToXml(string filePath, object sourceObj)
        {
            if (!string.IsNullOrWhiteSpace(filePath) && sourceObj != null)
            {
                using (StreamWriter writer = new StreamWriter(filePath))
                {
                    XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
                    namespaces.Add("mml", "http://www.w3.org/1998/Math/MathML");
                    namespaces.Add("xlink", "http://www.w3.org/1999/xlink");
                    namespaces.Add("jats", "http://jats.nlm.nih.gov/archiving/1.1/xsd");
                    namespaces.Add("mtl", "http://www.mulberrytech.com/taglib");
                    namespaces.Add("c", "http://www.w3.org/ns/xproc-step");
                    namespaces.Add("ali", "http://www.niso.org/schemas/ali/1.0");
                    namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
                    XmlSerializer xmlSerializer = new XmlSerializer(sourceObj.GetType());
                    xmlSerializer.Serialize(writer, sourceObj, namespaces);
                }
            }
        }

1.3特点

优点:对节点赋值时若节点值为null,则该节点不显示

缺点:无法对子节点进行排序


2、方案二:Altova XMLSpy生成程序编码,引用后直接调用

2.1 生成程序编码

Altova XMLSpy打开xml实例对应的schema文件,DTD/模式>产生程序编码,勾选对应模版(这里用的是C#)。vs打开生成项目,编译后取Altova.dll、AltovaXML.dll、[schema名称].dll三个dll到开发环境下即可

2.2 调用Altova编码生成的dll

[schema名称]  doc(实例名) = .CreateDocument("utf-8");

doc对象内有所有xml节点属性,主要方法有

Append();//添加该节点

Value属性//节点赋值

SaveToFile(string filename, bool prettyPrint) //生成xml文件

2.3 特点

优点:节点顺序和append顺序一致、底层代码自动生成

缺点:没有找到对应的api,Altova XMLSpy生成的代码只有一个简单例子(主程序注释部分)

3、方案三:linq to xml

没用过

4、方案四:XmlDocument 写文档

没用过,对于复杂xml,一个一个拼接的方式很折磨人


源码下载地址:

方案1、 http://download.csdn.net/download/zhanghuaiyu_35/10175822

方案2、http://download.csdn.net/download/zhanghuaiyu_35/10175826   

Altova xmlSpy 2013中文破解版:

 http://download.csdn.net/download/zhanghuaiyu_35/10175853

猜你喜欢

转载自blog.csdn.net/zhanghuaiyu_35/article/details/78911168