我有一个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}
...
现在在执行foreach之前,我想重新加载XML文档,以便值在文档中。我遇到的问题是只有在重新启动应用程序时才会加载更改。如何在转移到foreach段之前重新加载文件?
答案 0 :(得分: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}
...
如果没有,请提供更详细的示例,其中包含为每个变量定义的类型。
答案 1 :(得分:0)
这是一些令人困惑的代码;我假设xmlElement
是您在其他位置创建的<dependancy name='Microsoft Windows NT'/>
元素。
//
搜索所有元素,因此//dependancies//dependancy[@name='Microsoft Windows NT']
与//dependancy[@name='Microsoft Windows NT']
相同。假设已经存在至少一个<dependancy .../>
元素,那么
list[found - 1].AppendChild(foundNode);
将您的xmlElement
作为孩子插入最后一个现有的<dependancy .../>
元素中;像这样:
<dependancies>
<dependancy>
<dependancy name="Microsoft Windows NT" />
</dependancy>
</dependancies>
那一定是你的,否则list[found - 1]
会崩溃。
我遇到的问题是只有在重新启动应用程序时才会加载更改。
这是不正确的。您已在list[found - 1]
中进行了更改。真正的问题是你不是在搜索:
foreach (XmlNode node in list)
搜索list
的所有孩子,而不是list[found - 1]
的孩子。我猜你想要的是:
<dependancies>
<dependancy />
<dependancy name="Microsoft Windows NT" />
</dependancies>
为此,请将XmlNodeList list = xlDoc.SelectNodes("//dependancy");
替换为:
XmlNode dependancies = xlDoc.SelectSingleNode("//dependancies");
将list[found - 1].AppendChild(foundNode)
替换为:
dependancies.AppendChild(foundNode)
foreach (XmlNode node in list)
与:
foreach (XmlNode in dependancies.ChildNodes)
如果那不是您想要的,请澄清。
再次运行程序时获得新xmlElement
的原因是xlDoc.SelectNodes("//dependancy")
搜索所有节点,包括<dependancy .../>
中的节点。
此外,“依赖”是什么意思?你的意思是“依赖”吗?拼写错误非常非常混乱。