按元素名称从XML节点获取数据

时间:2015-12-03 08:55:44

标签: c# xml xml-parsing webclient

我有一个名为“server”的类,包含所有属性。我想将每个节点/元素的数据填入类中。 我知道的唯一方法是foreach,而不是每次都是一个大的开关盒。这不是最好的方法!

这里是XML文件:

<serverData  .....>
  <name>...</name>
  <number>...</number>
  <language>de</language>
  <timezone>...</timezone>
  <domain>...</domain>
  <version>...</version>
  ...
</serverData>

XML-File来自API,我用这句话得到它:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(Request.request(URL));

现在我想做一些事情(没有真正的代码只是一个例子):

Server server = new Server();
server.name = xmlDoc.node["name"].Value;
server.version = ...
...

感谢您的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以使用LINQ to XML:

XDocument xDoc = XDocument.Parse(Request.request(URL));

Server server = new Server {
    name = xDoc.Root.Element("name").Value,
    number = int.Parse(xDoc.Root.Element("name").Value),
    language = xDoc.Root.Element("language").Value,
    timezone = xDoc.Root.Element("timezone").Value
    /* etc. */
};

由于格式良好的XML文件具有常量结构,因此您也可以使用XmlSerializer对其进行序列化:

[Serializable]
[XmlRoot("serverData")]
public class ServerData
{
    [XmlElement("name")]
    public string Name { get; set; }

    [XmlElement("number")]
    public int Number { get; set; }

    [XmlElement("language")]
    public string Language { get; set; }

    [XmlElement("timezone")]
    public string Timezone { get; set; }

    /* ... */
}

XmlSerializer xmlSerializer = new XmlSerializer(typeof(ServerData));

using (Stream s = GenerateStreamFromString(Request.request(URL)))
{
    xmlSerializer.Deserialize(s);
}
可以找到

GenerateStreamFromString实施here