次のような XML ファイルがあります。
<Directories>
<directory name="name1" info="blahblah" otherInfo="blahblah">
<file fileName="name" path="" />
</directory>
<directory name="name2" info="blahblah" otherInfo="blahblah">
<file fileName="name" path="" />
</directory>
<directory name="name3" info="blahblah" otherInfo="blahblah">
<file fileName="name" path="" />
</directory>
</Directories>
次のコードを使用して関連するブランチを解析し、ディレクトリ/ファイル情報を更新しています。
XmlDocument objLog = new XmlDocument();
objLog.Load(path);
//update directory info
foreach (XmlNode objNode in objLog.SelectNodes("/Directories/directory"))
{
XmlElement objUpdatedNode = objLog.CreateElement("directory");
objUpdatedNode.SetAttribute("name", "NAME");
objUpdatedNode.SetAttribute("info", "INFO");
objUpdatedNode.SetAttribute("otherInfo", "OTHERINFO");
//update file information
foreach (XmlNode objFileNode in
objLog.SelectNodes("/Directories/directory/file"))
{
XmlElement objFileNode = objLog.CreateElement("file");
objFileNode.SetAttribute("fileName", "FILENAME");
objFileNode.SetAttribute("path", "PATH");
objLog.SelectNodes("/Directories")[0]
.ReplaceChild(objUpdatedNode, objNode);
objUpdatedNode.AppendChild(objUpdatedFileNode);
}
objLog.Save(path);
}
XMLファイルにディレクトリしかない場合、コードは期待どおりに機能しますが、上記のように複数のエントリがある場合、ファイルノードを複数回解析しようとするとエラーがスローされ、XMLファイルは更新されません. また、コードのファイル情報の更新部分を取り除くと、ディレクトリ ブランチが正しく更新されます。ディレクトリとそれに関連する内部ファイル ブランチの両方を更新するにはどうすればよいですか?