0

我有一个这样的 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);

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

4

3 回答 3

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();
于 2012-09-18T12:51:39.660 回答
2

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

考虑使用XPath来导航文档。

于 2012-09-18T12:31:07.287 回答
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')......

于 2012-09-18T12:43:15.760 回答