在xml文档中的SelectSingleNode
时,未获取错误对象变量或未设置块变量这是我的代码
sWC = My.Computer.FileSystem.ReadAllText("c:\inetpub\" & sServer & "\web.config")
Dim xmlDoc = New XmlDocument()
xmlDoc.Load("c:\inetpub\" & sServer & "\web.config")
Dim nodeRegion = xmlDoc.CreateElement("add")
nodeRegion.SetAttribute("key", sAppPool)
nodeRegion.SetAttribute("value", "Sunday,12:00 AM")
xmlDoc.SelectSingleNode("//appSettings").AppendChild(nodeRegion)
xmlDoc.Save("c:\inetpub\" & sServer & "\web.config")
xmlDoc.SelectSingleNode("//appSettings")
在这里得到"Nothing"
为字符串
在我的web.config中我有
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
配置部分中的xmlns。
如果我从配置标签中删除“xmlns”,我可以更新我的web.config。
如果我保持这个对象变量或块变量没有设置错误SelectSingleNode
来自xml
答案 0 :(得分:1)
看起来你还没有宣布你的//appSettings
部分。你能发布你的XML文件吗?尝试添加<appSettings> [.. Your Implementation here ..]</appSettings>
! ;)
** 编辑 **
我前段时间遇到过同样的问题。这是我现在在Visual C ++中使用的代码。使用两个数组调用UpdateAppSettings,一个包含键名,另一个包含相应的值。所以,让我们称之为:
UpdateAppSettings(gcnew array<String^>{"key"},gcnew array<String^>{"value"});
...它会将以下内容写入.config文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="key" value="value" />
</appSettings>
</configuration>
也许这样的事情正是你打算做的?
static void Daten::UpdateAppSetting(array<String^>^ names, array<String^>^ newVal) {
System::Configuration::ExeConfigurationFileMap^ ConfigMap =
gcnew System::Configuration::ExeConfigurationFileMap();
// Here you declare what file ConfigMap should refer to
ConfigMap->ExeConfigFilename = "C:\\{YOURAPPLICATIONNAME}.config";
// .config file einlesen und Daten in config speichern
MyConfig =
System::Configuration::ConfigurationManager::OpenMappedExeConfiguration(ConfigMap, ConfigurationUserLevel::None);
for (int i = 0; i < names->Length; i++) {
if (MyConfig->AppSettings->Settings[names[i]] != (nullptr))
MyConfig->AppSettings->Settings->Remove(names[i]);
MyConfig->AppSettings->Settings->Add(names[i], newVal[i]);
}
MyConfig->Save(ConfigurationSaveMode::Modified);
ConfigurationManager::RefreshSection("appSettings");
}
答案 1 :(得分:1)
您的XML具有默认命名空间(声明的命名空间不带前缀)。除非另有说明,否则后代元素会隐式继承祖先默认命名空间。要访问命名空间中的元素,您需要映射前缀以指向命名空间uri,然后在XPath中使用该前缀:
SqlDataReader reader;
string query = "OUTPUT * FROM DATA LIMIT_ONE";
conn.Open();
SqlCommand sqlCommand = new SqlCommand(query, conn);
using (reader = sqlCommand.ExecuteReader(){
Order o = OrderFromDatabase.buildOrder(reader.GetInt32(2), reader["type"].ToString());
powershellhandle.ExecutePS(o.getType(), o.getArguments());
}
conn.Close();