如何动态读取XML数据?如何管理我的C#代码尽可能通用和动态?根据要求,我需要在Xml中添加更多的文件夹路径,这不应该以必须重写的方式影响编写的代码。
给出一段XML作为样本:
<?xml version="1.0" standalone="yes"?>
<HOSTS>
<Host id = '1'>
<Extension>txt</Extension>
<FolderPath>C:/temp</FolderPath>
</Host>
<Host id = '2'>
<Extension>rar</Extension>
<FolderPath>C:/Sample</FolderPath>
</Host>
</HOSTS>
如何动态读取主机ID?我有什么可能性?
答案 0 :(得分:5)
是的 - 实际上这是C#中非常常见的任务。
有几种方法可以解决这个问题:
这些链接应该指向正确的方向。
答案 1 :(得分:2)
使用LINQ to XML。
示例:使用(id = 1)检索主机:
string id = "1"
XDocument doc = XDocument.Load("data.xml");
var accounts = from elements in doc.Elements("HOSTS").Elements("Host")
where elements.Attribute("id").Value = id
select elements.FirstOrDefault();
答案 2 :(得分:0)
您最好的选择是使用System.Xml.XmlDocument类和System.Xml.XmlDocument.Load(...)作为构造函数。
答案 3 :(得分:0)
从该样本xml生成xsd方案。根据需要修改它,然后使用xsd.exe生成强类型C#类。
答案 4 :(得分:0)
对于这种情况,最好的方式(对我来说)是使用XML序列化来强类型化类。您可以使用Attributes控制流程。
var serializer = new XmlSerializer(typeof(Hosts));
var hosts = (Hosts)serializer.Deserialize(new StringReader(str));
...
[XmlRoot("HOSTS")]
public class Hosts : List<Host> {}
public class Host {
[XmlAttribute("id")]
public int Id { get; set; }
public string Extension { get; set; }
public string FolderPath { get; set; }
}