0

私は、C# で保存されている xml と linq を保存することに少し緑色です。これは私のコードです:

    public static void EditConfiguration (DesignConfiguration design)
    {
        XDocument configXml = XDocument.Load(configXMLFileName);
        var updateData = configXml.Root.Elements("Design").Where(element => (String)element.Attribute("name") == design.DesignName).FirstOrDefault();

        if (updateData != null)
        {
            var myElements = updateData.Elements();  //All the elements under th Design node 
            configXml.Save(configXMLFileName);    
       }            
    }

myElements 変数には、次のような要素があります。

<SourceFolder>C:\CSF_Packages</SourceFolder>
<DestinationFolder>C:\Inetpub</DestinationFolder>
<CopyLookups>True</CopyLookups>
<CopyImages>False</CopyImages>
<ImageSourceFolder>None</ImageSourceFolder>
<ImageDesinationFolder>None</ImageDesinationFolder>

この各要素を設計構成オブジェクトの値で更新したいと考えています。オブジェクトに値が1つある場合、これはそれほど難しくありませんが、次のような値があります:

design.SourceFolder design.DesitnationFolder

など(要素と同じように)。オブジェクトは、上記の要素に新しい値を提供します。foreach ループを使用する必要があることは明らかですが、それを使用したときの結果は、私が望むものではありません...

これは私のforeachループです:

            foreach (var item in myElements )
            {
                item.SetElementValue("SourceFolder", design.SourceFolder);
            }

ループには、プレゼンテーションのニーズに対応する要素が 1 つしかありませんが、もっと多くの要素をループに入れたかったのです。そして、これは私が得るものです:

<SourceFolder>C:\CSF_Packages<SourceFolder>C:\CSF_Packages</SourceFolder></SourceFolder>
<DestinationFolder>None<SourceFolder>C:\CSF_Packages</SourceFolder></DestinationFolder>
<CopyLookups>True<SourceFolder>C:\CSF_Packages</SourceFolder></CopyLookups>
<CopyImages>False<SourceFolder>C:\CSF_Packages</SourceFolder></CopyImages>
<ImageSourceFolder>C:\Inetpub<SourceFolder>C:\CSF_Packages</SourceFolder></ImageSourceFolder>
<ImageDesinationFolder>None<SourceFolder>C:\CSF_Packages</SourceFolder></ImageDesinationFolder>

私はを頂きたい:

<SourceFolder>new_value_from the DesignConfiguration object from the SourceFolder property</SourceFolder>
<DestinationFolder>new_value_from the DesignConfiguration object from the Desitnation Folder property</DestinationFolder>
<CopyLookups>new_value_from the DesignConfiguration object from the CopyLookups property</CopyLookups>

などなど... ストレスの多い初心者を助けてください:) どうもありがとう。

4

1 に答える 1

0

子の XElements を削除してから、新しい XElements を親に追加する必要があります。これらを試してください(テストされていません):

public static void EditConfiguration (DesignConfiguration design)
{
    XDocument configXml = XDocument.Load(configXMLFileName);
    var updateData = configXml.Root.Elements("Design").Where(element => (String)element.Attribute("name") == design.DesignName).FirstOrDefault();

    if (updateData != null)
    {
        var myElements = updateData.Elements();  //All the elements under th Design node 
        myElements.Remove();
        updateData.SetElementValue("SourceFolder", design.SourceFolder);
        updateData.SetElementValue("DestinationFolder", design.DestinationFolder);
        updateData.SetElementValue("CopyLookups", design.CopyLookups);

        configXml.Save(configXMLFileName);
   }            
}
于 2012-11-08T15:58:43.900 に答える