• 如何将数据转换成XML格式


    1.字符串拼接加载为XML

    简单来说,这种是显而易见的老实或者蠢一点的方法。将字符串拼接成XML的字符串,然后LoadXml即可。

    2.将数据对象序列化为XML字符串后加载为XML

    类、变量常用头(声明):

    [XmlRootAttribute]:对根节点的描述,在类声明中使用

    [XmlType]:对节点描述,在类声明中使用

    [XmlElement]:节点下内部节点描述,如果对数组标识,是对数组单元描述 

    [XmlAttribute]:节点下内部属性描述 

    [XmlArrayItem]:数组单元项描述

    [XmlArray]:数组描述 

    [XmlIgnore]:使该项不序列化             

    [XmlText]:做为节点的text文本输出          

    比如,我想要生成形如下面的形式

    <Test name="是我的"></Test>
     1 [WebMethod]
     2 public XmlDocument DemoXML() {
     3        Test t = new Test();
     4        t.name = "是我的";
     5        t.Comment = "";
     6 
     7        XmlDocument XmlDoc = new XmlDocument();
     8        string xmlstring = Utility.Tool.Serialize(t);
     9        XmlDoc.LoadXml(xmlstring);
    10             
    11        return XmlDoc;
    12 }

    序列化的类:

    public class Test {
            [XmlAttribute]//头声明为Test的属性
            public string name;
    
            private string comment;
            [XmlText]//头声明为Test的值
            public string Comment
            {
                get
                {
                    return comment;
                }
                set
                {
                    comment = value;
                }
            } 
     }

    但是当Test节点的值有特殊符号的时候,xml的就会发生错误(应该是跟xml的关键字符发生冲突)。这时候就需要加上CDATA,用以忽略值内的特殊符号。

    public class Test {
            [XmlAttribute]//头声明为Test的属性
            public string name;
    
            private string comment;
            [XmlIgnore]//指明在序列化时是否序列化一个属性,这里表示不序列化此属性
            public string Comment
            {
                get
                {
                    return comment;
                }
                set
                {
                    comment = value;
                    CDataComment = new CDATA(comment);
                }
            }
            
            private CDATA cDataComment;
            [XmlElement(ElementName = "xiaoqin_SuperElement", Type = typeof(CDATA))]
            public CDATA CDataComment
            {
                get { return cDataComment; }
                set { cDataComment = value; }
            }
        }

    这时的结果是:

    <Test name="是我的">
    <xiaoqin_SuperElement>
    <![CDATA[]]>
    </xiaoqin_SuperElement>
    </Test>

    跟我想要的结果并不一样,怎么办,我目前也不知道怎么做。暂且用代替的:

    xmlstring = xmlstring.Replace("<xiaoqin_SuperElement>", "").Replace("</xiaoqin_SuperElement>", "");

  • 相关阅读:
    Python迭代器的反复使用
    快速求幂模运算实现
    rural lifestyle & city lifestyle
    Python实现 扩展的欧几里德算法求(模逆数)最大公约数
    jupyter themes一行命令设置个人最爱界面
    python数组、矩阵相乘的多种方式
    有一组整型数,其中除了2个数字以外的其它数字都是俩俩成对出现的,编写程序找出这2个不成对出现的数字。
    Linux线程池技术处理多任务
    编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以 及任何的比较语句。
    C++const类型的引用参数
  • 原文地址:https://www.cnblogs.com/hougelou/p/4673134.html
Copyright © 2020-2023  润新知