我想将没有任何XSD架构的外部XML文档转换为流畅的.NET对象。
我有一个简单的XML文件,如:
<application>
<parameters>
<param></param>
<param></param>
</parameters>
<generation />
<entities>
<entity ID="1">
<PropTest>Test</PropTest>
</entity>
<entity ID="2">
<PropTest>Another Test</PropTest>
</entity>
</entities>
</application>
我想将文档导航为:
var xConfig = new XmlConfig("file.xml");
// testValue should be assigned "Test"
string testValue = xConfig.Generation.Entities.Entity(1).PropTest;
在.NET 3.5中实现此目的的最佳方法是什么?
答案 0 :(得分:2)
可以说,最近这样做的最好方法是使用Linq to XML。这比搞乱XSD和复杂的类定义要容易得多。
XDocument doc = XDocument.Load("file.xml");
var val = doc
.Descendants("entity")
.Where(p => p.Attribute("ID").Value == "1")
.Descendants("PropTest")
.FirstOrDefault();
if (val != null)
Console.WriteLine(val.Value);
我使用的示例file.xml是:
<?xml version="1.0" encoding="utf-8" ?>
<application>
<parameters>
<param></param>
<param></param>
</parameters>
<generation>
<entities>
<entity ID="1">
<PropTest>Test</PropTest>
</entity>
<entity ID="2">Another Test</entity>
</entities>
</generation>
</application>
答案 1 :(得分:2)
我刚刚注意到Lusid在我写答案时也写了关于Linq to SQL的内容,但他使用了XDocument。
这是我的版本(file.xml
是问题中给出的XML):
string testValue =
(string) XElement.Load("file.xml")
.Element("entities")
.Elements("entity")
.FirstOrDefault(entity => entity.Attribute("ID")
.Value == "1") ?? string.Empty;
答案 2 :(得分:1)
答案 3 :(得分:1)
Kevin Hazzard使用.NET 4.0动态类型part 1和part 2为C#编写了一个流畅的XML接口。这将允许代码:
var v = dx.application.entities.entity[0].PropTest.Value;
答案 4 :(得分:0)
如果您只是提取架构(使用xsd.exe应该很容易),那么online tool(也可以下载)可以帮助您,我尝试了它就可以了。
答案 5 :(得分:0)
定义从ConfigurationSection / ConfigurationElement等派生的类。它们很好地映射到xml文件(这就是它们的内容)。请参阅MSDN。另一种方法是创建POCO对象并在属性上设置XML序列化属性,然后使用System.XML.XMLSerializer对XML进行序列化/反序列化。请参阅MSDN for XML Serialization。