从XML文件读取时出错

时间:2012-09-18 12:29:47

标签: c# xml

我有一个像这样的XML文件

     <?xml version="1.0" encoding="utf-8" ?> 
 <conStr>
  <server>192.168.1.25;</server> 
  <initial_catalog>chargdb;</initial_catalog> 
  <uid>sa;</uid> 
  <pwd>1;</pwd> 
  </conStr>

我正在使用此代码从此文件中获取数据:

        XmlDocument xd = new XmlDocument();
        xd.Load(Application.StartupPath + @"\cng.xml");
        string conStr = string.Empty;
        conStr += "server=";
        conStr +=xd.DocumentElement.ChildNodes[0].Attributes["server"].Value;
        conStr += "initial catalog=";
        conStr += xd.DocumentElement.ChildNodes[0].Attributes["initial_catalog"].Value;
        conStr += "uid=";
        conStr += xd.DocumentElement.ChildNodes[0].Attributes["uid"].Value;
        conStr += "pwd=";
        conStr += xd.DocumentElement.ChildNodes[0].Attributes["pwd"].Value;
        MessageBox.Show(conStr);

但每次我给出如下错误消息:“对象引用未设置为对象的实例。” 请帮帮我,我该怎么做才能阅读我的文件?感谢

3 个答案:

答案 0 :(得分:3)

您现有的代码正在<server>元素中查找属性。这不会起作用,因为你应该在根元素中寻找元素

我会做两处修改:

  • 使用LINQ to XML获取值
  • 使用SqlConnectionStringBuilder而不是字符串
  • 构建连接字符串

这样的事情:

XDocument doc = XDocument.Load(...);
var root = doc.Root;
var builder = new SqlConnectionStringBuilder
{
    DataSource = root.Element("server").Value,
    InitialCatalog = root.Element("initial_catalog").Value,
    UserID = root.Element("uid").Value,
    Password = root.Element("pwd").Value
};
var connectionString = builder.ToString();

答案 1 :(得分:2)

xd.DocumentElement.ChildNodes[0]指的是<conStr>元素。你需要看看它的孩子。

考虑使用XPath来浏览文档。

答案 2 :(得分:1)

为了正确回答你的问题,这就是Jakub的意思:

        string conStr = string.Empty; 
        conStr += "server=";
        conStr += xd.DocumentElement.SelectSingleNode("./server").InnerText;
        conStr += "initial catalog=";
        conStr += xd.DocumentElement.SelectSingleNode("./initial_catalog").InnerText;
        conStr += "uid=";
        conStr += xd.DocumentElement.SelectSingleNode("./uid").InnerText; 
        conStr += "pwd=";
        conStr += xd.DocumentElement.SelectSingleNode("./pwd").InnerText; 

        MessageBox.Show(conStr); 

对于记录Jakub,xd.DocumentElement.ChildNodes [0],是根元素('conStr')...