错误:vb选择单个节点对象变量或未设置块变量

时间:2015-08-06 08:24:53

标签: xml vb.net web-config xmldocument

在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

2 个答案:

答案 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();