使用XML属性创建XML结构

本文关键字:XML 结构 创建 属性 使用 | 更新日期: 2023-09-27 18:14:18

我试图解决一个谜与xml属性。问题是我们已经广泛使用了这种结构的文件,我不能偏离

<CONFIGS>
  <CONFIG>
    <NAME>c1</NAME>
    <DB>
      <VAL1>v1</VAL1>
      <VAL2>v2</VAL2>
      <VAL3>v3</VAL3>
    </DB>
  </CONFIG>
  <CONFIG>
    <NAME>c2</NAME>
    <DB>
      <VAL1>v1</VAL1>
      <VAL2>v2</VAL2>
      <VAL3>v3</VAL3>
    </DB>
  </CONFIG>
</CONFIGS>
我已经创建了这个c#代码
// master class
[XmlRoot(ElementName = "CONFIGS")]
public class MyConfigs
{
    [XmlArrayItem(ElementName = "CONFIG", Type = typeof(MyConfigSchema))]
    public MyConfigSchema[] Schemas { get; set; }
}
// I should have array of these
public class MyConfigSchema
{
    [XmlElement(DataType = "string", ElementName = "NAME")]
    public string Name { get; set; }
    [XmlElement(ElementName = "DB", Type = typeof(Db))]
    public Db Config { get; set; }
    // this element is single and has subelements
    public class Db
    {
        [XmlElement(DataType = "string", ElementName = "VAL1")]
        public string Val1 { get; set; }
        [XmlElement(DataType = "int", ElementName = "VAL2")]
        public int Val2 { get; set; }
        [XmlElement(DataType = "string", ElementName = "VAL3")]
        public string Val3 { get; set; }
    }
}
// Writing 
using (var writer = new FileStream(testfile, FileMode.Create))
        {
            var ser = new XmlSerializer(typeof(MyConfigs));
            ser.Serialize(writer, confFileObj);
            writer.Close();
        }

这是我的问题-它写了以下输出,这几乎是我需要的,但在那里它写了我不能拥有的<Schemas>. . . </Schemas>

<CONFIGS> --<Schemas>-- <CONFIG> <NAME>c1</NAME> <DB> <VAL1>v1</VAL1> <VAL2>v2</VAL2> <VAL3>v3</VAL3> </DB> </CONFIG> <CONFIG> <NAME>c2</NAME> <DB> <VAL1>v1</VAL1> <VAL2>v2</VAL2> <VAL3>v3</VAL3> </DB> </CONFIG> --</Schemas>-- </CONFIGS>

有办法去除<Schemas>. . . </Schemas>吗?

使用XML属性创建XML结构

看起来我刚刚解决了。我以前从来没有见过这个,看了MSDN,因此我没有尝试。但是我试过了

[XmlArrayItem(ElementName = "CONFIG", Type = typeof(MyConfigSchema))]
public MyConfigSchema[] Schemas { get; set; }

do this

[XmlElement(ElementName = "CONFIG", Type = typeof(MyConfigSchema))]
public MyConfigSchema[] Schemas { get; set; }

代替XmlArrayItem我放置XmlElement,它工作。我不知道可以用纯元素属性标记List或array