说,我有这样的xml文件:
<?xml version="1.0"?>
<catalog>
<title>My book catalog</title>
<link>http://example.com/catalog</link>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
</catalog>
最后需要获取对象,我可以使用如下:
xml.title //must return "My book catalog"
xml.link //must return "http://example.com/catalog"
xml.book[0] //is an object with following properties:
//author, title, genre etc...
//i.e., xml.book[0].author must return Gambardella, Matthew
希望没有类似的问题,对不起,如果有,我的坏,我没有找到。此外,如果有任何文件,特殊情况,请指出它,因为我找不到它。有很多关于xml解析的文档有各种各样的方法,但没有关于这种情况的信息。
提前感谢。
答案 0 :(得分:1)
以下是使用these extension methods:
的LinqToXml代码[DebuggerDisplay("{Title}")]
public class Catalog
{
XElement self;
public Catalog(XElement catalog) { self = catalog; }
public string Title { get { return self.Get("title", string.Empty); } }
public Uri Link { get { return self.Get<Uri>("link", null); } }
public Book[] Books
{
get { return _Books ?? (_Books = self.GetEnumerable("book", x => new Book(x)).ToArray()); }
}
Book[] _Books;
[DebuggerDisplay("{Title} by {Author}")]
public class Book
{
XElement self;
public Book(XElement book) { self = book; }
public string Id { get { return self.Get("id", string.Empty); } }
public string Author { get { return self.Get("author", string.Empty); } }
public string Title { get { return self.Get("title", string.Empty); } }
public string Genre { get { return self.Get("genre", string.Empty); } }
public decimal Price { get { return self.Get<decimal>("price", 0); } }
public DateTime PublishDate { get { return self.Get("publish_date", DateTime.MinValue); } }
public string Description { get { return self.Get("description", string.Empty); } }
}
}
使用它:
Catalog catalog = new Catalog(XElement.Load(file)); // or .Parse(string)
答案 1 :(得分:0)
doc = XDocument.Load("path/to/file.xml");
List<book> items = doc.Root.Element("catalog").Elements("book").
Select(e => new book(
(string)e.Element("author").Value,
(string)e.Element("title").Value,
(string)e.Element("price").Value,
(string)e.Element("publish_date").Value,
(string)e.Element("description").Value,
(string)e.Element("genre").Value
)).ToList();