我正在尝试使用此函数将值写入XML文件。我保留sql_connection下的值,但收到错误,“对象引用未设置为对象的实例。”我理解错误的含义,但我不知道如何使用XML文件。我该如何处理这个问题?当我单步执行代码时,它会停在myNode.Value = sql_connection;它说我返回一个空值,但sql_connection看到我在管理页面上输入的值。提前谢谢。
public void SAVEsqlConnection(string sql_Connection)
{
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load("C:\\Users\\fthompson11\\WebFile.xml");
XmlNode root = myXmlDocument.DocumentElement;
XmlNode myNode = root.SelectSingleNode("/connectionString");
myNode.Value = sql_Connection;
myXmlDocument.Save("C:\\Users\\fthompson11\\WebFile.xml");
}
我也试过这样做:
public void SAVEsqlConnection(string sql_Connection)
{
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load("C:\\Users\\fthompson11\\WebFile.xml");
string connectionStringXPath = "/ConnectionStrings/add[@connectionString=\"{0}\"]";
connectionStringXPath = string.Format(connectionStringXPath, sql_Connection);
XmlNode node = myXmlDocument.SelectSingleNode(connectionStringXPath);
node.Attributes["ConnectionStrings"].Value = sql_Connection;
myXmlDocument.Save("C:\\Users\\fthompson11\\WebFile.xml");
}
你走了:
<?xml version="1.0" encoding="UTF-8"?>
<!--This is to write the connection string-->
-<ConnectionStrings> <add connectionString="asdf" Name="sqlConnection1"/> </ConnectionStrings>
答案 0 :(得分:1)
您似乎想要做以下事情:
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load(@"..\..\XMLFile1.xml");
XmlNode root = myXmlDocument.DocumentElement;
//We only want to change one connection.
//This could be removed if you just want the first connection, regardless of name.
var targetKey = "sqlConnection1";
//get the add element we want
XmlNode myNode = root.SelectSingleNode(string.Format("add[@Name = '{0}']", targetKey));
var sql_Connection = "some sql connection";
//set the value of the connectionString attribute to the value we want
myNode.Attributes["connectionString"].Value = sql_Connection;
myXmlDocument.Save(@"..\..\XMLFile2.xml");
答案 1 :(得分:0)
您的XPATH值不正确。
XmlNode myNode = root.SelectSingleNode("/connectionString");
上面的行myNode
为null,因为方法SelectSingleNode
返回第一个与XPath查询匹配的XmlNode,如果找不到匹配的节点则 null 并且没有包含该XPATH的节点。看起来像是在ConnectionStrings中离开“s”的错误(或者认为你可以使用属性名称,如元素[node] name
在你的第二个例子中,XPATH需要解析为
"/ConnectionStrings/add[@connectionString='asdf']"
同样,看起来你有一个错字,你在表达式中使用引号(“)而不是刻度(')。
如果您正在寻找add element
的属性,那么您的XPATH表达式将为/ConnectionStrings/add
,然后您就可以获得该节点的属性。这假设您已从根节点向我们提供了XML。您可能需要查看此tutorial
一旦超过XmlNode
的空问题,就会出现另一个拼写错误。
node.Attributes["ConnectionStrings"].Value = sql_Connection;
在上面的XML示例中,属性名称为connectionString
而不是ConnectionStrings
,因此您需要将上一行更改为。
node.Attributes["connectionString"].Value = sql_Connection;
答案 2 :(得分:0)
node.Attributes["**ConnectionStrings**"].Value = sql_Connection;
应该与Xml中的确切外壳一样。 Xml区分大小写