C# 从 XML 文件中读取

标签 c# xml

我正在开发一个从 XML 文件读取的应用程序。但我有一个问题。我的 XML 文件如下所示:

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

我是这样读的:

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;
    }
}

在这段代码之后,我应该得到我的 elem.name="Love" elem.value=0 elem.type=INT 但相反,我有四个 elem 变量,首先具有值,我希望其他变量具有 type="INT" other (name, value) =null。有任何想法吗。提前致谢。

最佳答案

首先你需要一个像这样的对象:

[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; }

}

然后像这样反序列化您的 XML:

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

注意: 这是我的自定义 XML 反序列化器:

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;
}

关于C# 从 XML 文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44261853/

相关文章:

c# - 如何在可选扩展名之前将随机字符串附加到文件名?

java - JAXB,如何在错误的情况下解码不同的对象

xml - Xslt 1.0,更改日期格式

java - Java 中的编码问题

c# - 使用 p/Invoke 的 x64 版本的 .net 应用程序崩溃

c# - 在 C# 中,我如何像 google calc 那样实现模数?

c# - 变量大于字节大小,为什么?

c# - WPF-如何在不使用向上、向下、向左和向右箭头键的情况下设置向上、向下、向左、向右事件?

Xml 到文本转换错误

xml - 'packages' 元素未声明