2010-03-09 48 views
0

我的对象看起来像:存储在/files/test.xml在Web应用程序加载XML成XDOC,然后初始化对象

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

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对象? (说与NAME =一些键所对应的模板

回答

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 
}); 
+0

这将返回一个错误,如果他们没有在xml中找到? – Blankman 2010-03-09 21:02:29

+0

@布兰克曼:是的。您可以在第一次默认调用后放置默认值以避免这些错误。例如:.FirstOrDefault(template => template.Attribute(“name”)。Value.Equals(“someKey”)?? new XElement(“Somekey”) – Gregoire 2010-03-09 21:05:40

+0

非常酷,谢谢! – Blankman 2010-03-09 21:15:17

0

你可以建立你的XML的XSD(模式),并使用xsd.exe工具,你可以生成在您的XML可以反序列化到它的类。

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

0

如果你想从XML文件直接转到对象,你应该使用serialization(具体是类)。

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

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