我正在开发一个从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"
其他(名称,值)= null。有任何想法吗。提前谢谢。
答案 0 :(得分:2)
首先你需要一个像这样的对象:
[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进行deserilize:
var result = XmlDeserializer<Variable>(File.ReadAllText("your path"));
请注意: 这是我的自定义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;
}
答案 1 :(得分:1)
老实说,在学习LINQ to XML时值得你学习。它更容易,并且不需要很长时间来重构你的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();
就是这样。