0

如何动态读取 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?我有什么可能性?

4

5 回答 5

6

是的 - 实际上这是 C# 中非常常见的任务。

有几种方法可以解决这个问题:

这些链接应该为您指明正确的方向。

于 2012-05-28T17:31:00.737 回答
3

使用 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();
于 2012-05-28T17:35:20.870 回答
1

从该示例 xml 生成 xsd 方案。根据需要对其进行修改,然后使用xsd.exe生成强类型 C# 类。

于 2012-05-28T17:32:13.873 回答
0

您最好的选择是将System.Xml.XmlDocument类与System.Xml.XmlDocument.Load(...)一起用于构造函数。

于 2012-05-28T17:28:00.140 回答
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; }
}
于 2012-05-28T19:20:26.067 回答