2017-04-11 23 views
1

このコードブロックはIf/Elseの一部であり、既に書き込まれているファイルがドキュメントに追加される必要があります。しかし、それは新しいファイルであるかのように、新しいxml宣言とルート要素を追加しているようです。コードは次のようになります。XDocument新しいドキュメント宣言をXMLファイルに追加する

:このブロックの2回目のパスで

{ 
    FileStream fs = new FileStream(configFile, FileMode.Open); 
    XDocument xD = XDocument.Load(fs); 
    XElement root = xD.Element("Store"); 
    root.Add(
      new XElement("template", new XElement("filePath", tmp.TempPath), 
      new XElement("Name", tmp.TempName), 
      new XElement("description", tmp.TempDesc))); 
    xD.Save(fs); 
    fs.Flush(); 
    fs.Dispose(); 
} 

、それはエラーが出て、このようなファイル.....の途中で無効なXML宣言がある旨

<?xml version="1.0" encoding="utf-8"?> 
<Store> 
    <template> 
    <filePath>.\templates\balls.html</filePath> 
    <Name>Balls</Name> 
    <description>Benoit</description> 
    </template> 
</Store><?xml version="1.0" encoding="utf-8"?> 
<Store> 
    <template> 
    <filePath>.\templates\balls.html</filePath> 
    <Name>Balls</Name> 
    <description>Benoit</description> 
    </template> 
    <template> 
    <filePath>.\templates\benoit.html</filePath> 
    <Name>benoit</Name> 
    <description>balls</description> 
    </template> 
</Store> 

私はXMLのためにLINQを正しく使用していないと疑っています。

答えて

2

ファイルを上書きするのではなく、同じファイルにXMLを追加しています。

オプションは、修正する:

  • が先頭に戻ってファイルを探し
  • が再オープンされたファイル

    // load and close stream 
    XDocument xD; 
    using(var fs = new FileStream(configFile, FileMode.Open)) 
    { 
        xD = XDocument.Load(fs); 
    } 
    
    // modify document 
    XElement root = xD.Element("Store"); 
    root.Add(
         new XElement("template", new XElement("filePath", tmp.TempPath), 
         new XElement("Name", tmp.TempName), 
         new XElement("description", tmp.TempDesc))); 
    
    // open stream again and save XML 
    using(var fs = new FileStream(configFile, FileMode.Open)) 
    { 
        xD.Save(fs); 
    } 
    
+0

OMGこれは完璧です!ありがとう! –

関連する問題