-1

私は次の演習を行う必要があります...

次のxmlファイルを取得します...

<?xml version="1.0" encoding="UTF-8"?>
<Mitarbeiterstatistik xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Mitarbeiter>
    <Vorname>Horst</Vorname>
    <Nachname>Schneider</Nachname>
    <Id>1</Id>
  </Mitarbeiter>
  <Mitarbeiter>
    <Vorname>Tanja</Vorname>
    <Nachname>Lindner</Nachname>
    <Id>2</Id>
  </Mitarbeiter>
</Mitarbeiterstatistik>

今、私は次の手順を試しました...

ミターバイタークラスを作りました!

public class Mitarbeiter
{
private string vorname;
private string nachname;
private int id;

public Mitarbeiter()
{

}

public Mitarbeiter(string vorname, string nachname, int id)
{
  this.vorname = vorname;
  this.nachname = nachname;
  this.id = id;
}

public string Vorname
{
  get { return vorname; }
  set { vorname = value; }
}

public string Nachname
{
  get { return nachname; }
  set { nachname = value; }
}

public int Id
{
  get { return id; }
  set { id = value; }
}
}

次に、 Mitarbeiter オブジェクトのリストを含むクラス Mitarbeiterstatistik を作成しました...

[XmlRoot("Mitarbeiterstatistik")]
public class Mitarbeiterstatistik
{
  private List<Mitarbeiter> list = new List<Mitarbeiter>();

  [XmlArray("List")]
  public List<Mitarbeiter> List
  {
    get { return list; }
    set { list = value; }
  }
}

私のメインクラスは次のように見えます...

class Program
{
  static void Main(string[] args)
  {
    Mitarbeiterstatistik maStatistik = new Mitarbeiterstatistik();
    Mitarbeiter ma1 = new Mitarbeiter("Horst", "Schneider", 1);
    Mitarbeiter ma2 = new Mitarbeiter("Tanja", "Lindner", 2);
    maStatistik.List.Add(ma1);
    maStatistik.List.Add(ma2);
    XmlSerializer serializer = new XmlSerializer(typeof(Mitarbeiterstatistik));
    XmlWriter writer = XmlWriter.Create(@"D:\test.xml");
    serializer.Serialize(writer, maStatistik);
    writer.Close();
  }
}

今、私は次の結果を得ました...

<?xml version="1.0" encoding="UTF-8"?>
<Mitarbeiterstatistik xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  **<List>**
    <Mitarbeiter>
      <Vorname>Horst</Vorname>
      <Nachname>Schneider</Nachname>
      <Id>1</Id>
    </Mitarbeiter>
    <Mitarbeiter>
      <Vorname>Tanja</Vorname>
      <Nachname>Schneider</Nachname>
      <Id>2</Id>
    </Mitarbeiter>
  **</List>**
</Mitarbeiterstatistik>

いいえ、Xml ファイルに要素「リスト」があります... :-)

私の問題に対して私は何ができますか...

Mitarbeiter クラスのみを定義し、Mitarbeiterstatistik クラスを定義しない可能性はありますか?

たぶん、次のように?

  List<Mitarbeiter> list = new List<Mitarbeiter>();

  Mitarbeiter ma1 = new Mitarbeiter("Horst", "Schneider", 1);
  Mitarbeiter ma2 = new Mitarbeiter("Tanja", "Lindner", 2);

  list.Add(ma1);
  list.Add(ma2);

  XmlSerializer serializer = new XmlSerializer(typeof(List<Mitarbeiter>), new XmlRootAttribute("Mitarbeiterstatistik"));

  XmlWriter writer = XmlWriter.Create(@"D:\test.xml");

  serializer.Serialize(writer, list);

  writer.Close();

または、Mitarbeiterstatistik-Class を保持するチャンスはありますか??? そして、私のList-Elementを無効にしますか???

4

2 に答える 2

0

[XmlArray]の代わりに取得したい要素の名前で[XmlElement]を使用して、属性「リスト」から抜け出すことができます(質問を正しく理解していないため):

[XmlRoot("Mitarbeiterstatistik")]
public class Mitarbeiterstatistik
{
  private List<Mitarbeiter> list = new List<Mitarbeiter>();

  [XmlElement("Mitarbeiter")]
  public List<Mitarbeiter> List {get; set;}     
}
于 2013-12-19T12:57:16.860 に答える
0

Linq To Xml を試してみたい場合:

XDocument xDoc = new XDocument(new XElement("Mitarbeiterstatistik"));

foreach (var mitarbeiter in list)
{
    xDoc.Root.Add(
            new XElement("Mitarbeiter",
                new XElement("Vorname" ,mitarbeiter.Vorname ),
                new XElement("Nachname" ,mitarbeiter.Nachname ),
                new XElement("Id" ,mitarbeiter.Id )));

}

xDoc.Save(@"d:\test.xml");
于 2013-01-27T18:12:10.320 に答える