用于替换ini文件的xml类

时间:2010-05-05 17:30:10

标签: c# .net xml linq linq-to-xml

我正在学习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)
    {
    }
}

2 个答案:

答案 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是正确的方法。