2016-10-20 4 views
0

xml属性を持つパズルを解決しようとしています。問題私はxml属性を使用した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>を取り除くの方法はありますか?

答えて

1

私はちょうどそれを解決したように見えます。私は以前これを見たことがなく、MSDNを見て、それで試してみませんでした。しかし、私が試したの代わりに、この

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

この

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

代わりのXmlArrayItemを行う私はXmlElementを配置し、それが働きました。単純な要素属性を持つリストまたは配列にマークすることはできません。

関連する問題