简体   繁体   English

C#从XML文件读取

[英]C# Reading from XML files

I am developing an application that reads from XML files. 我正在开发一个从XML文件读取的应用程序。 But I am having a probling. 但是我有一个问题。 My XML file looks like this: 我的XML文件如下所示:

<variable>
  <varName>Love</varName>
  <type>int</type>
  <value>0</value>
</variable>

And I am reading it like this: 我正在这样阅读:

XmlDataDocument xmldoc = new XmlDataDocument();
XmlNodeList xmlnode;
FileStream fs = new FileStream(fName, FileMode.Open, FileAccess.Read);
xmldoc.Load(fs);
xmlnode = xmldoc.GetElementsByTagName("variable");
for (int i = 0; i <= xmlnode.Count - 1; i++)
{
    Variable elem = new Variable();

    for (int j = 0; j < xmlnode[i].ChildNodes.Count; j++)
    {
        if (xmlnode[i].ChildNodes.Item(j).Name == "varName")
            elem.varName = xmlnode[i].ChildNodes.Item(j).InnerText;

        if (xmlnode[i].ChildNodes.Item(j).Name == "type")
        {
            if (xmlnode[i].ChildNodes.Item(j).InnerText == "int")
                elem.type = VariableType.INT;

            if (xmlnode[i].ChildNodes.Item(j).InnerText == "bool")
                elem.type = VariableType.BOOL;
        }

        if (xmlnode[i].ChildNodes.Item(j).Name == "value")
            elem.value = xmlnode[i].ChildNodes.Item(j).InnerText;
    }
}

After this code I should have got my elem.name="Love" elem.value=0 elem.type=INT But instead I have four elem variables first having values I want others with type="INT" others (name, value) =null. 在此代码之后,我应该有我的elem.name="Love" elem.value=0 elem.type=INT但是我有四个elem变量,第一个具有值,我希望其他type="INT"其他变量(名称,值) = NULL。 Any IDEAS. 有任何想法吗。 Thanks in advance. 提前致谢。

at first you need an object like this: 首先,您需要一个像这样的对象:

[XmlRoot(ElementName = "variable")]
public class Variable
{
    [XmlElement(ElementName = "varName")]
    public string VarName { get; set; }

    [XmlElement(ElementName = "type")]
    public string Type { get; set; }

    [XmlElement(ElementName = "value")]
    public string Value { get; set; }

}

then deserilize your XML like this: 然后像这样反序列化XML:

var result = XmlDeserializer<Variable>(File.ReadAllText("your path"));

note: here is my custom XML deserilzer: 注意:这是我的自定义XML Deserilzer:

public static T XmlDeserializer<T>(string xmlString)
{
    var instance = default(T);
    var xmlSerializer = new XmlSerializer(typeof(T));
    using (var stringreader = new StringReader(xmlString))
        instance = (T)xmlSerializer.Deserialize(stringreader);

    return instance;
}

Honestly it would be worth your while learning LINQ to XML. 老实说,值得您学习LINQ to XML。 It's much easier and wouldn't take long to refactor your 1000 lines. 这很容易,并且不需要很长时间即可重构您的1000行。

var map = new Dictionary<string, VariableType>()
{
    { "int", VariableType.INT },
    { "bool", VariableType.BOOL },
};

var variables =
    XDocument
        .Load("fname")
        .Root
        .Elements("variable")
        .Select(x => new Variable()
        {
            varName = x.Element("varName").Value,
            type = map[x.Element("type").Value.ToLower()],
            value = x.Element("value").Value,
        })
        .ToList();

That's it. 而已。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM