我有一个像这样的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);
但每次我给出如下错误消息:“对象引用未设置为对象的实例。” 请帮帮我,我该怎么做才能阅读我的文件?感谢
答案 0 :(得分:3)
您现有的代码正在<server>
元素中查找属性。这不会起作用,因为你应该在根元素中寻找元素。
我会做两处修改:
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')...