2016-03-19 16 views
0

C#のXML APIに少し問題があります。私は、XMLファイルにオブジェクトのリストを保存するために、次のコードを持っている:C#XML - ルート要素にオブジェクトのリストを追加する

public void Export(List<Booking> bookings) 
{ 
    string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "zeitbuchungen.xml"); 

    XmlDocument xmlDocument = new XmlDocument(); 
    XPathNavigator xmlNavigator = xmlDocument.CreateNavigator(); 
    using (XmlWriter xmlWriter = xmlNavigator.AppendChild()) 
    { 
     XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Booking>), new XmlRootAttribute("Bookings")); 
     xmlSerializer.Serialize(xmlWriter, bookings); 
    } 
    xmlDocument.Save(path); 
} 

問題は、私は再び、このメソッドを呼び出した場合、ファイル、である - もちろんのは - 置き換えられますが、私は新しいを追加したいですリストをファイルに追加します。

私は二回メソッドを呼び出す場合、これは、ファイルはのようになります方法です。

<Bookings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Booking> 
    <SerialNumberTerminal>1234567890</SerialNumberTerminal> 
    <TransponderID>FBbNAx75KHjN</TransponderID> 
    <BookingDateTime>2016-03-19T20:21:01</BookingDateTime> 
    <BookingCommand>G</BookingCommand> 
    </Booking> 
    <Booking> 
    <SerialNumberTerminal>1234567890</SerialNumberTerminal> 
    <TransponderID>wJAo3EGsuSRI</TransponderID> 
    <BookingDateTime>2016-03-19T20:21:01</BookingDateTime> 
    <BookingCommand>G</BookingCommand> 
    </Booking> 
</Bookings> 

私はすでに私がxmlDocument.Load(path)で既存のファイルを読み込むことができ、考え出したが、私はどのように知りませんルート要素に新しいリストを追加します。

答えて

0

ファイルをロードしてから、すでに行ったことをルードに要素を追加する必要があります。私はこの種のコードを作ろうとしました。これが正しい方法であなたを助けてくれることを願っています。 :)

public void Export(List<Booking> bookings) 
{ 
    string path =Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "zeitbuchungen.xml"); 
    //This block is what you need to add 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(path); 
    ////////////////// 
    using (XmlWriter xmlWriter = xmlNavigator.AppendChild()) 
    { 
     XmlSerializer xmlSerializer =(doc, new XmlRootAttribute("Bookings")); 

    using (FileStream fs = new FileStream(path, FileMode.Create)) 
    { 
     xmlSerializer.Serialize(xmlWriter, bookings); 
     fs.Close(); 
    } 
    } 
    xmlDocument.Save(path); 
} 
関連する問題