2012-02-27 29 views
0

XMLドキュメントリロードする方法:foreachのが実行される前に値がであるように 私は次のコードで変更したXMLファイル持って

XmlDocument xlDoc = new XmlDocument(); 
      string[] files = Directory.GetFiles("C:\\Program Files (x86)", "Product.config", SearchOption.AllDirectories); 
      string sfile = files[0]; 
      xlDoc.Load(sfile); 
      XmlNodeList list = xlDoc.SelectNodes("//dependancy"); 
    XmlNode foundNode = xlDoc.SelectSingleNode("//dependancies//dependancy[@name='Microsoft Windows NT']"); 
int found = list.Count; 

    if (foundNode == null) 
    { 
     foundNode = xmlElement; 
     list[found - 1].AppendChild(foundNode); 
     xlDoc.Save(sfile); 
     ConfigurationManager.RefreshSection(sfile); 
    } 

    foreach (XmlNode node in list) 
    { 
     xlDoc.Load(sfile); 
     try 
     {//use inserted node} 
     ... 

は今、私は、XMLドキュメントを再ロードする必要が資料。私が経験している問題は、アプリケーションが再起動した場合にのみ変更がロードされることです。 foreachセグメントに移動する前に、ファイルを再ロードするにはどうすればよいですか?

+0

タイトルに「c#」などのプレフィックスを付けないでください。それがタグのためのものです。 –

+0

xlDocには、既にリロードしたいファイルを作成するために使用したデータが入っています。リロードする必要はありません。 –

答えて

0

これはかなり混乱するコードです。私はxmlElementが他の場所で作成した<dependancy name='Microsoft Windows NT'/>要素であると仮定します。

//は、すべての要素を検索するため、//dependancies//dependancy[@name='Microsoft Windows NT']//dependancy[@name='Microsoft Windows NT']と同じです。その後、

list[found - 1].AppendChild(foundNode); 

が最後の既存の<dependancy .../>要素内部の子としてあなたxmlElementを挿入します、少なくとも一つの<dependancy .../>要素がすでに存在していると仮定すると、このように:あなたが持っているものでなければならない

<dependancies> 
    <dependancy> 
     <dependancy name="Microsoft Windows NT" /> 
    </dependancy> 
</dependancies> 

は、そうでない場合 list[found - 1]がクラッシュします。

問題は、アプリケーションが再起動された場合にのみ変更がロードされることです。

これは間違っています。すでにlist[found - 1]に変更があります。本当の問題は、それはあなたが探しているものではありませんです。

listのすべての子、 list[found - 1]のない子を検索し
foreach (XmlNode node in list) 

XmlNodeList list = xlDoc.SelectNodes("//dependancy");を置き換える、

<dependancies> 
    <dependancy /> 
    <dependancy name="Microsoft Windows NT" /> 
</dependancies> 

それを取得するには::私は何をしたいことはあると推測していて

dependancies.AppendChild(foundNode) 

そしてforeach (XmlNode node in list)

foreach (XmlNode in dependancies.ChildNodes) 

XmlNode dependancies = xlDoc.SelectSingleNode("//dependancies"); 

はとlist[found - 1].AppendChild(foundNode)を交換してください

それがあなたが望むものでない場合は、明確にしてください。

xmlElementを再度実行すると、xlDoc.SelectNodes("//dependancy")は、<dependancy .../>のノードを含むすべてのノードを検索するためです。

また、「依存性」とはどういう意味ですか?あなたは "依存"を意味しますか?スペルミスは非常に、非常に混乱しています。

+0

これはまさに私が達成したかったものです!非常に詳細な答えをあなたは非常にあなたに! – p0enkie

0

sfileはStream型のオブジェクトですか?もしそうなら、あなたはあなたのストリームをフラッシュする必要があるかもしれないし、ない場合は、0

if (foundNode == null) 
    { 
     foundNode = xmlElement; 
     list[found - 1].AppendChild(foundNode); 
     xlDoc.Save(sfile); 
     ConfigurationManager.RefreshSection(sfile); 
    } 

    // Reset position of stream 
    sfile.Flush(); 
    sfile.Position = 0; 

    foreach (XmlNode node in list) 
    { 
     xlDoc.Load(sfile); 
     try 
     {//use inserted node} 
     ... 

にそのストリームの位置をリセットし、各ウェル変数に定義されたタイプと、より詳細な例を提供してください。

+0

sfileは実際のxmlドキュメントです。これを含めるためにオリジナルの投稿を編集しました。 – p0enkie

関連する問題