C# 从 XML 文件中读取 [英] C# Reading from XML files
问题描述
我正在开发一个从 XML 文件读取的应用程序.但我有一个问题.我的 XML 文件如下所示:
I am developing an application that reads from XML files. But I am having a probling. My XML file looks like this:
<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"
others (name, value) =null.有任何想法吗.提前致谢.
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. Any IDEAS. Thanks in advance.
推荐答案
老实说,学习 LINQ to XML 是值得的.重构 1000 行代码要容易得多,而且不会花很长时间.
Honestly it would be worth your while learning LINQ to XML. It's much easier and wouldn't take long to refactor your 1000 lines.
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();
就是这样.
这篇关于C# 从 XML 文件中读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!