作者:化妆师苹苹 | 来源:互联网 | 2023-06-10 17:53
希望您过得愉快!
我现在正在努力将XML(尤其是XML格式的CPLEX Sol文件)解析为C#类。
我定义了一个类,如下所示。
[XmlRoot("CPLEXSolutions")]
public class CplexSol
{
[XmlElement("CPLEXSolution")]
public List Solutions { get; set; }
public CplexSol()
{
SolutiOns= new List();
}
}
public class CPLEXSolution
{
[XmlElement("header")]
public string Header { get; set; }
[XmlElement("variables")]
public List CplexVariables { get; set; }
public CPLEXSolution()
{
CplexVariables = new List();
}
}
public class CplexVariable
{
[XmlElement("name")]
public string name { get; set; }
[XmlElement("index")]
public string index { get; set; }
[XmlElement("value")]
public string value { get; set; }
}
文件的XML格式与标准格式有所不同,如下所示。
problemName="ILOG.CPLEX"
solutiOnName="m2"
solutiOnIndex="1"
MIPStartEffortLevel="0"
writeLevel="2"/>
....
您是否有将其解析为定义的类的想法?预先感谢!
[更新]我测试了@jdweng建议的代码,但如下所示运行该类后,该类为空。
我猜是格式引起了问题。我该如何解决?
您复制XML内容。在VS中,选择“选择性粘贴”。 VS会自动将XML转换为正确的C#类。
,
我修复了代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(CplexSol));
CplexSol cplexsol = (CplexSol)serializer.Deserialize(reader);
}
}
[XmlRoot("CPLEXSolutions")]
public class CplexSol
{
[XmlElement("CPLEXSolution")]
public List Solutions { get; set; }
}
public class CPLEXSolution
{
[XmlElement("header")]
public string Header { get; set; }
[XmlArray("variables")]
[XmlArrayItem("variable")]
public List CplexVariables { get; set; }
}
public class CplexVariable
{
[XmlAttribute("name")]
public string name { get; set; }
[XmlAttribute("index")]
public string index { get; set; }
[XmlAttribute("value")]
public string value { get; set; }
}
}