将xml加载到xdoc中,然后初始化对象

时间:2010-03-09 20:47:09

标签: c# asp.net linq-to-xml

我的对象如下:

public class Template
{
     public string Title {get;set;}
     public string Body {get;set;}
}

存储在Web应用程序(根目录)中的/files/test.xml中的xml:

<nodes>
<template name="someKey">
  <node name="title">soem title</node>
  <node name="body">some body text here</node>
</template>
</nodes>

所以我可以加载文档,如:

XDocument doc = XDocument.Load(HttpContext.Current.Server.MapPath("~/files/test.xml"));

现在我如何从xml加载对象? (比如名称= somekey的模板

3 个答案:

答案 0 :(得分:1)

var templates = doc.Elements("template")
.FirstOrDefault(template=>template.Attribute("name").Value.Equals("someKey")
.Select(template=>new Template
{
    Title =  template.Elements("node").FirstOrDefault(node=>node.Attribute("name").Value.Equals("title")).Value,
    Body = template.Elements("node").FirstOrDefault(node=>node.Attribute("name").Value.Equals("body")).Value
 });

答案 1 :(得分:0)

您可以为XML构建XSD(架构),并使用XSD.exe工具生成可以将XML反序列化的类。

我不确定这是你想要的,但它绝对有效:)

答案 2 :(得分:0)

如果您想直接从XML文件转到对象,您应该使用serialization(特别是XmlSerializer类)。

这样,您无需为从文件到对象创建自定义解决方案。

看一下XmlSerializer msdn页面上的例子,关于它是如何工作的很多好东西。