C# 什么';解析具有许多不同级别的XML文件的最简单方法是什么?

C# 什么';解析具有许多不同级别的XML文件的最简单方法是什么?,c#,xml,linq,linq-to-xml,xmlreader,C#,Xml,Linq,Linq To Xml,Xmlreader,我知道这是一个很长的问题。。但我在这里疯狂地试图学习解析XML文档的多种方法之一。。。我在网上看到的很多例子都是非常简单的XML文档。。但是我有一些多层次的东西,我想把它解析一下 我的班级代码如下: 我如何才能成功解析这个噩梦?一切都是我创建的一个漂亮整洁的类。。但是要想把所有的东西都放回课堂上,我有很多麻烦 XDocument xdoc; try { List<MLBPage> collection =

我知道这是一个很长的问题。。但我在这里疯狂地试图学习解析XML文档的多种方法之一。。。我在网上看到的很多例子都是非常简单的XML文档。。但是我有一些多层次的东西,我想把它解析一下

我的班级代码如下:

我如何才能成功解析这个噩梦?一切都是我创建的一个漂亮整洁的类。。但是要想把所有的东西都放回课堂上,我有很多麻烦

XDocument xdoc;
        try
        {
            List<MLBPage> collection =
            {
                from e in XDocument.Load("PageList.xml").Root.Elements("PageList")

                select new MLBPage
                {
                    ul = new Quadrant  //upper left
                    {
                        qp = new QuadrantParameters
                        {
                            //league, season, category, rank order here
                        },
                        qi = new QuadrantInfo
                        {
                            //team logo, rank, name, stat here
                        }
                    }
                }
            }
        }
        catch (Exception)
        {
            /
xdocumentxdoc;
尝试
{
列表集合=
{
从XDocument.Load(“PageList.xml”).Root.Elements(“PageList”)中的e
选择新的MLB页面
{
ul=新象限//左上角
{
qp=新象限参数
{
//联赛、赛季、类别、排名顺序
},
qi=新象限信息
{
//球队标志,排名,名字,统计在这里
}
}
}
}
}
捕获(例外)
{
/

您可以开始映射类/属性/元素:

[Serializable] //Root
[XmlRoot(ElementName = "InfXml", Namespace="the namespace URI")]
public class InfXml
{
    [XmlAttribute(AttributeName = "id")] //attribute
    public string Id { get; set; }
    public bool ShouldSerializeId() //Should serialize, only serializes if not null.
    {
        return !string.IsNullOrEmpty(Id); //This is only for optional fields.
    }

    [XmlElement(ElementName = "Identification")] //Non optional group.
    public Identification Identification{ get; set; }

    [XmlElement(ElementName = "Adress")] //Optional group.
    public Adress Adress{ get; set; }
    public bool ShouldSerializeAdress()
    {
        return Adress!= null;
    }
}
如果您有一个映射到Xml的类,则可以使用以下2种方法:

const string PrefixXml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";

public static object Deserialize<T>(T obj, string xmlText)
{
    try
    {
        XmlSerializer deserializer = new XmlSerializer(typeof(T));
        TextReader textReader = new StringReader(xmlText);
        return (T)deserializer.Deserialize(textReader);
    }
    catch (Exception ex)
    {
        //Catch here.
        return null;
    }

}

public static XmlDocument Serialize<T>(T obj)
{
    string xmlString = GerarXml.Gerar<T>(obj);
    if (!xmlString.Contains("xml version="))
    {
        xmlString = PrefixXml + xmlString;
    }
    xmlString = xmlString.Replace(Environment.NewLine, string.Empty);
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xmlString);
    return doc;
}

你为什么不创建一个与xml完全相似的类结构并反序列化它呢?我确实有一个与xml完全相似的类…我将编辑OP并粘贴这些类..因为我不知道如何反序列化?好的,我粘贴了我的类..你们能给我一个你所说的反序列化的例子吗?只是想找到一个解决方案onwow我希望这很容易…好的,我将重命名XML字段,使它们与我的类完全匹配,并尝试一下。TyvmOK。给我反馈,我有更多的代码要共享。好的,这将需要一点时间,我在一个小时后离开工作,可能要到明天或周一才能回到这一点。但我希望你能回来检查。又来了
[Serializable] //Root
[XmlRoot(ElementName = "InfXml", Namespace="the namespace URI")]
public class InfXml
{
    [XmlAttribute(AttributeName = "id")] //attribute
    public string Id { get; set; }
    public bool ShouldSerializeId() //Should serialize, only serializes if not null.
    {
        return !string.IsNullOrEmpty(Id); //This is only for optional fields.
    }

    [XmlElement(ElementName = "Identification")] //Non optional group.
    public Identification Identification{ get; set; }

    [XmlElement(ElementName = "Adress")] //Optional group.
    public Adress Adress{ get; set; }
    public bool ShouldSerializeAdress()
    {
        return Adress!= null;
    }
}
const string PrefixXml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";

public static object Deserialize<T>(T obj, string xmlText)
{
    try
    {
        XmlSerializer deserializer = new XmlSerializer(typeof(T));
        TextReader textReader = new StringReader(xmlText);
        return (T)deserializer.Deserialize(textReader);
    }
    catch (Exception ex)
    {
        //Catch here.
        return null;
    }

}

public static XmlDocument Serialize<T>(T obj)
{
    string xmlString = GerarXml.Gerar<T>(obj);
    if (!xmlString.Contains("xml version="))
    {
        xmlString = PrefixXml + xmlString;
    }
    xmlString = xmlString.Replace(Environment.NewLine, string.Empty);
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xmlString);
    return doc;
}
public static string GetXmlText(XmlDocument doc)
{
    StringWriter stringWriter = new StringWriter();
    XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);

    doc.WriteTo(xmlTextWriter);

    string ret = stringWriter.ToString();

    ret = ret.Replace(Environment.NewLine, string.Empty);
    if (!ret.Contains("xml version="))
    {
        return PrefixXml + ret;
    }
    return ret;

}