C# 从xml文件构建类

C# 从xml文件构建类,c#,xml,C#,Xml,首先,我很抱歉,我知道我的问题很简单,但我真的很感谢你的帮助,我承受着很大的压力,所以发表明智的评论和讽刺是没有帮助的 我有以下代码: 至少我在努力。 我有这个xml文件,我需要将它的所有属性保存在一个类中,这样我就可以随时复制它 我不知道该怎么做 public static void firstFileXml(string sXml1) { var root = XElement.Load(@"sXml1"); var controlElementsFirst = root.D

首先,我很抱歉,我知道我的问题很简单,但我真的很感谢你的帮助,我承受着很大的压力,所以发表明智的评论和讽刺是没有帮助的

我有以下代码: 至少我在努力。 我有这个xml文件,我需要将它的所有属性保存在一个类中,这样我就可以随时复制它

我不知道该怎么做

public static void firstFileXml(string sXml1)
{
    var root = XElement.Load(@"sXml1");
    var controlElementsFirst = root.Descendants("books");
}
XML文件具有如下属性:标签、文本、标签等。 我需要一个能让我进入的函数或东西,比如: 探索(xmlLocation)并完成其余的工作。 因为我需要对一些xml文件执行此操作

我需要建立一个类,让我能够阅读它。 假设我有这个xml文件:



等等。 我需要先读取这个xml文件,然后将图书属性存储在一个类中,这样我以后就可以在数百本图书中使用它

代码:

使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Xml.Serialization;
静态类程序
{
静态void Main()
{
//将xml作为字符串获取;注意,我们还可以使用
//反序列化(流)以处理文件流,但
//很好
字符串xml=File.ReadAllText(@“C:\Users\books.xml”);
var ser=新的XmlSerializer(typeof(BookRoot));
var root=(BookRoot)ser.Deserialize(新的StringReader(xml));
foreach(root.Books中的var book)
{
Console.WriteLine(“标签:+book.label”);
Console.WriteLine(“页面:+book.page”);
Console.WriteLine(“简介:+book.intro”);
Console.ReadLine();
}
}
}
[XmlRoot(“表”)]
公共类BookRoot
{
私有只读列表书=新列表();
[XmlArray(“书籍”)、XmlArrayItem(“书籍”)]
公共列表图书{获取{归还图书;}
}
公共课堂用书
{
[XmlAttribute(“标签”)]
公共字符串标签{get;set;}
[XmlAttribute(“页面”)]
公共字符串页{get;set;}
[XmlAttribute(“简介”)]
公共字符串简介{get;set;}
}
在命令行中:

xsd yourfile.xml
xsd /c yourfile.xsd
这将使用xml作为模板创建C#类(通过模式推理);然后可以将这些类与
XmlSerializer
一起使用,即

var ser = new XmlSerializer(typeof(YourRootType));
YourRootType root = (YourRootType)ser.Deserialize(source);
Console.WriteLine(root.Foo);
foreach(Bar bar in root.Bars) {
    Console.WriteLine(bar.Name);
    Console.WriteLine(bar.Id);
}
例如,使用:

<books>
<book label='' page='' intro=''/>
<book label='' page='' intro=''/>
<book label='' page='' intro=''/>
</books>
请注意,手动操作要容易得多:

[XmlRoot("books")]
public class BookRoot {
    private readonly List<Book> books = new List<Book>();
    [XmlElement("book")]
    public List<Book> Books { get { return books; } }
}
public class Book {
    [XmlAttribute("label")]
    public string Label {get;set;}
    [XmlAttribute("page")]
    public string Page {get;set;}
    [XmlAttribute("intro")]
    public string Intro {get;set;}
}

最近的一次编辑在XML中添加了一个级别,需要对属性进行一些调整—更改根元素名称,并添加一个附加级别(
books/book
=>
SHEET/books/book
):

[XmlRoot(“工作表”)]
公共类BookRoot
{
私有只读列表书=新列表();
[XmlArray(“书籍”)、XmlArrayItem(“书籍”)]
公共列表图书{获取{归还图书;}
}
在命令行中:

xsd yourfile.xml
xsd /c yourfile.xsd
这将使用xml作为模板创建C#类(通过模式推理);然后可以将这些类与
XmlSerializer
一起使用,即

var ser = new XmlSerializer(typeof(YourRootType));
YourRootType root = (YourRootType)ser.Deserialize(source);
Console.WriteLine(root.Foo);
foreach(Bar bar in root.Bars) {
    Console.WriteLine(bar.Name);
    Console.WriteLine(bar.Id);
}
例如,使用:

<books>
<book label='' page='' intro=''/>
<book label='' page='' intro=''/>
<book label='' page='' intro=''/>
</books>
请注意,手动操作要容易得多:

[XmlRoot("books")]
public class BookRoot {
    private readonly List<Book> books = new List<Book>();
    [XmlElement("book")]
    public List<Book> Books { get { return books; } }
}
public class Book {
    [XmlAttribute("label")]
    public string Label {get;set;}
    [XmlAttribute("page")]
    public string Page {get;set;}
    [XmlAttribute("intro")]
    public string Intro {get;set;}
}

最近的一次编辑在XML中添加了一个级别,需要对属性进行一些调整—更改根元素名称,并添加一个附加级别(
books/book
=>
SHEET/books/book
):

[XmlRoot(“工作表”)]
公共类BookRoot
{
私有只读列表书=新列表();
[XmlArray(“书籍”)、XmlArrayItem(“书籍”)]
公共列表图书{获取{归还图书;}
}

您正在寻找xml序列化,这并不是因为它们有节点,而我主要使用的是属性。请允许我使用一些示例算法或小代码,只是为了有一个无效xml的想法…我修复了xml文件结构,现在没事了,不管怎样,xml本身是ok的。您正在寻找xml序列化,不是因为它们有节点,而我主要使用属性。请给我一些示例算法或小代码,让我知道这不是有效的xml…我修复了xml文件结构,现在没事了,不管怎样,xml本身没问题谢谢你的帮助,你能看看我的xml结构吗?除此之外,我还在做视觉方面的工作studio@AniAni您的xml实际上不是xml,但我将在此基础上编辑它的功能。xsd.exe工具是.NET SDK的一个免费部分,但如果它不是一个工具,对我来说会更好,我希望我能理解它,但对我来说很难me@AniAni你们说“我需要建立一个类,让我能够阅读它。”;这正是xsd.exe工具所做的。我不确定这里到底是什么问题。。。但您也可以手工完成:请看结尾处的短得多(但相当)的手工编码版本。xsd.exe是一种方法,至少对于第一步(从XML生成xsd)。您还可以尝试使用比xsd.exe更多的选项来从.xsd文件生成类。谢谢您的帮助,您能看看我的xml结构吗?除此之外,我还在做视觉方面的工作studio@AniAni您的xml实际上不是xml,但我将在此基础上编辑它的功能。xsd.exe工具是.NET SDK的一个免费部分,但如果它不是一个工具,对我来说会更好,我希望我能理解它,但对我来说很难me@AniAni你们说“我需要建立一个类,让我能够阅读它。”;这正是xsd.exe工具所做的。我不确定这里到底是什么问题。。。但您也可以手工完成:请看结尾处的短得多(但相当)的手工编码版本。xsd.exe是一种方法,至少对于第一步(从XML生成xsd)。您还可以尝试使用比xsd.exe更多的选项从.xsd文件生成类。
var ser = new XmlSerializer(typeof(books));
var root = (books)ser.Deserialize(new StringReader(xml));
foreach(var book in root.Items)
{
    Console.WriteLine("label: " + book.label);
    Console.WriteLine("page: " + book.page);
    Console.WriteLine("intro: " + book.intro);
}
[XmlRoot("books")]
public class BookRoot {
    private readonly List<Book> books = new List<Book>();
    [XmlElement("book")]
    public List<Book> Books { get { return books; } }
}
public class Book {
    [XmlAttribute("label")]
    public string Label {get;set;}
    [XmlAttribute("page")]
    public string Page {get;set;}
    [XmlAttribute("intro")]
    public string Intro {get;set;}
}
var ser = new XmlSerializer(typeof(BookRoot));
var root = (BookRoot)ser.Deserialize(new StringReader(xml));
foreach(var book in root.Books)
{
    Console.WriteLine("label: " + book.Label);
    Console.WriteLine("page: " + book.Page);
    Console.WriteLine("intro: " + book.Intro);
}
[XmlRoot("SHEET")]
public class BookRoot
{
    private readonly List<Book> books = new List<Book>();
    [XmlArray("books"), XmlArrayItem("book")]
    public List<Book> Books { get { return books; } }
}