1

我正在尝试使用此函数将值写入 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>
4

3 回答 3

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");
于 2013-04-09T01:35:01.383 回答
0

您的 XPATH 值不正确。

XmlNode myNode = root.SelectSingleNode("/connectionString");

在上面的行myNode中是 null,因为方法SelectSingleNode 返回与 XPath 查询匹配的第一个 XmlNode;如果没有找到匹配的节点并且没有包含该 XPATH 的节点,则返回 null。看起来像是一个错字,您在 ConnectionStrings 中省略了“s”(或者认为您可以使用属性名称,如元素 [节点] 名称

在您的第二个示例中,XPATH 需要解析为

"/ConnectionStrings/add[@connectionString='asdf']"

同样,您似乎有一个错字,您在表达式中使用引号(“)而不是记号(')。

如果您正在寻找 add 的属性,element那么您的 XPATH 表达式将是/ConnectionStrings/add,然后您可以获得该节点的属性。这假设您已经从根节点向我们提供了 XML。你可能想看看这个教程

一旦您通过了XmlNode.

node.Attributes["ConnectionStrings"].Value = sql_Connection;

在上面的 XML 示例中,属性名称connectionString不是ConnectionStrings,因此您需要将上面的行更改为。

node.Attributes["connectionString"].Value = sql_Connection;
于 2013-04-09T01:29:25.667 回答
0
node.Attributes["**ConnectionStrings**"].Value = sql_Connection;

应该与 Xml 中的大小写完全相同。Xml 区分大小写

于 2013-04-09T01:35:58.173 回答