我刚开始使用C#语言并且正在寻找一种方法来迭代xml文件中的元素和子元素。
我的xml看起来像这样 -
<ServerList>
<server name = "serverName1" username ="username" password ="password">
<serviceName>serviceName</serviceName>
<serviceName>serviceName</serviceName>
<serviceName>serviceName</serviceName>
</server>
<server name = "serverName2" username ="username" password = "password">
<serviceName>serviceName</serviceName>
<serviceName>serviceName</serviceName>
</server>
<ServerList>
我只是在寻找一种方法,我可以浏览第一个服务器元素及其子元素,而不是下一个服务器元素及其子元素。
答案 0 :(得分:2)
您可以使用LINQ to XML作为一种简单的方法:
XDocument xdoc = XDocument.Load("myXmlFile.xml");
var servers = xdoc.Descendants("server");
for (var server in servers)
{
var children = server.Elements();
for (var child in children)
{
// Do what you want with the server and child here
}
}
如果您需要更多信息,可能需要考虑使用XML反序列化。这将允许您定义映射到XML模式中的节点的类,将XML反序列化为强类型对象的图形,然后您可以迭代,过滤,转换等。如果您确定这种方法,我建议使用{ {3}},因为BCL XML序列化器很糟糕。
答案 1 :(得分:2)
后代很好,无论如何这里是一种递归方法
class Program
{
static void Main(string[] args)
{
XElement x = XElement.Load("XMLFile1.xml");
recursive(x.Elements());
Console.ReadKey();
}
private static void recursive(IEnumerable<XElement> elements)
{
foreach (XElement n in elements)
{
Console.WriteLine(n.Name);
Console.WriteLine("--");
if (n.Descendants().Any())
{
recursive(n.Elements());
}
else
{
Console.WriteLine(n.Value.ToString());// End of node (leaf)
}
}
}
}