2013-04-09 63 views
1

我正在嘗試使用此函數將值寫入XML文件。我保留sql_connection下的值,但是收到錯誤,「對象引用未設置爲對象的實例」。我明白錯誤的含義,但我不知道如何使用XML文件。我應該如何處理這個問題?當我遍歷代碼時,它停在myNode.Value = sql_connection;它說我正在返回一個空值,但sql_connection看到我在我的管理頁面上輸入的值。提前致謝。使用標準微軟庫寫入XML文件

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> 
+2

對我來說聽起來像'myNode'爲null,而不是'sql_Connection'。請顯示您的示例x​​ml,看起來像你的'.SelectSingleNode'沒有返回任何東西。 – 2013-04-09 01:00:20

+0

同意。太糟糕了,他沒有包括髮生錯誤的行。那我們就不用猜測了。 – 2013-04-09 01:11:28

+0

您正在製作配置文件。你可以使用配置,配置部分e.t.c類來製作那些配置文件 – 2013-08-19 12:05:39

回答

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"); 
+0

謝謝傑拉德。我的錯誤給每個人不提供錯誤的線。 – 2013-04-10 01:46:37

0

你XPATH值不正確。

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

在線以上myNode爲null,因爲方法SelectSingleNode返回如果沒有匹配的節點發現匹配XPath查詢或null,並且有一個包含XPATH沒有節點第一XmlNode的。看起來你離開的地方在的ConnectionStrings的「S」一個錯字(或認爲你可以使用屬性名稱,比如元素[節點]名

在第二個例子中,XPATH需要解析到

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

再次,它看起來像你的,而不是蜱(')在表達一個錯字,你正在使用引號(「)。

如果你正在尋找增加element的屬性,然後你的XPATH表達式會/ConnectionStrings/add然後你可以得到那個節點的屬性,假設你給了我們X ML從根節點開始。你可能想看看這個tutorial

一旦你通過XmlNode的空問題,你有另一個錯字。

node.Attributes["ConnectionStrings"].Value = sql_Connection; 
在屬性名稱上面的XML例子

connectionStringConnectionStrings,所以你將需要更改上面的線。

node.Attributes["connectionString"].Value = sql_Connection; 
0
node.Attributes["**ConnectionStrings**"].Value = sql_Connection; 

應該是準確的外殼爲XML。 Xml區分大小寫