我正在学习C#.NET 2008中的Windows窗体,我想构建一个类来处理SIMPLE xml文件(配置文件就像INI文件),但我只需要一个简单的类(open,getvalue,setvalue,creategroup,保存和关闭功能),替换ini文件。
我已经做了一些事情并且它正在运行,但是当我需要创建不同的组时我遇到了麻烦,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<CONFIG>
<General>
<Field1>192.168.0.2</Field1>
</General>
<Data>
<Field1>Joseph</Field1>
<Field2>Locked</Field2>
</Data>
</CONFIG>
如何指定我想读取[data]组的field1?请注意,我在两个组中都有相同的字段名称(Field1)!
我正在使用System.Linq,如下所示:
打开文档:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(FilePath);
保存文件:
xmlDoc.Save(FilePath);
获得价值:
public string getValue(string Field)
{
string result = "";
try
{
XmlNodeList xmlComum = xmlDoc.GetElementsByTagName(Field);
if (xmlComum.Item(0) == null)
result = "";
else
result = xmlComum.Item(0).InnerText;
}
catch (Exception ex)
{
return "";
}
return result;
}
设定值:
public void setValue(string Group, string Field, string FieldValue)
{
try
{
XmlNodeList xmlComum = xmlDoc.GetElementsByTagName(Field);
if (xmlComum.Item(0) == null)
{
xmlComum = xmlDoc.GetElementsByTagName(Group);
if (xmlComum.Item(0) == null)
{
// create group
createGroup(Group);
xmlComum = xmlDoc.GetElementsByTagName(Group);
}
XmlElement xmlE = xmlDoc.CreateElement(Field);
XmlText xmlT = xmlDoc.CreateTextNode(FieldValue);
xmlE.AppendChild(xmlT);
xmlComum.Item(0).AppendChild(xmlE);
}
else
{
// item already exists, just change its value
xmlComum.Item(0).InnerText = Value;
}
xmlDoc.Save(FilePath);
}
catch (Exception ex)
{
}
}
CreateGroup代码:
public void createGroup(string Group)
{
try
{
XmlElement xmlComum = xmlDoc.CreateElement(Group);
xmlDoc.DocumentElement.AppendChild(xmlComum);
xmlDoc.Save(FilePath);
}
catch (Exception ex)
{
}
}
答案 0 :(得分:2)
虽然您可能在项目中“使用”System.Linq,但您并未使用所谓的“Linq-to-XML”类。即使您没有使用LINQ,这也会让事情变得简单5倍!使用 System.Linq.XML 名称空间,可以访问这些新的xml类(XDocument,XElement等)
XDocument XDoc = XDocument.Load("ThePath")
String Field1 = (String)XDoc.Root.Element("Data").Element("Field1")
答案 1 :(得分:1)
如果您使用XML文件作为配置数据的实际存储库(就像我们以前使用.INI文件一样,回到时间的迷雾中)那么System.Configuration
就是你的朋友,因为它处理读取和写入App.Config
,这是一个专门为此设计的XML文件。
以下是一些细节和示例:System.Configuration
当然,如果您正在为XML文件编写通用接口,System.Linq.XML
是正确的方法。