使用标准的Microsoft软件库写入XML文件

时间:2013-04-09 00:55:19

标签: c# html xml asp.net-mvc

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

3 个答案:

答案 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区分大小写