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