C# 在C语言中读取和迭代xml元素#
我刚刚开始使用C#语言,寻找一种迭代xml文件中的元素和子元素的方法 我的xml看起来像这样-C# 在C语言中读取和迭代xml元素#,c#,xml,C#,Xml,我刚刚开始使用C#语言,寻找一种迭代xml文件中的元素和子元素的方法 我的xml看起来像这样- <ServerList> <server name = "serverName1" username ="username" password ="password"> <serviceName>serviceName</serviceName> <serviceName>serviceName</
<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>
服务名
服务名
服务名
服务名
服务名
我只是在寻找一种方法,在这种方法中,我可以遍历第一个服务器元素及其子元素,而不是下一个服务器元素及其子元素。您可以使用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反序列化为强类型对象的图形,然后您可以迭代、过滤、转换等。如果您决定使用这种方法,我建议使用,因为BCL XML序列化程序有点糟糕。
您可以使用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反序列化为强类型对象的图形,然后您可以迭代、过滤、转换等。如果您决定使用这种方法,我建议使用BCL XML序列化程序,因为BCL XML序列化程序有点差劲。
子体很好,这里有一个递归方法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)
}
}
}
}
类程序
{
静态void Main(字符串[]参数)
{
XElement x=XElement.Load(“XMLFile1.xml”);
递归(x.Elements());
Console.ReadKey();
}
私有静态void递归(IEnumerable元素)
{
foreach(元素中的元素n)
{
控制台写入线(n.名称);
Console.WriteLine(“--”);
if(n.后代().任何())
{
递归(n.Elements());
}
其他的
{
Console.WriteLine(n.Value.ToString());//节点结束(叶)
}
}
}
}
子体很好,这里有一个递归方法
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)
}
}
}
}
类程序
{
静态void Main(字符串[]参数)
{
XElement x=XElement.Load(“XMLFile1.xml”);
递归(x.Elements());
Console.ReadKey();
}
私有静态void递归(IEnumerable元素)
{
foreach(元素中的元素n)
{
控制台写入线(n.名称);
Console.WriteLine(“--”);
if(n.后代().任何())
{
递归(n.Elements());
}
其他的
{
Console.WriteLine(n.Value.ToString());//节点结束(叶)
}
}
}
}
这可能重复的可能重复是100%错误的,它将只返回子项(servicename
s),而不返回属性(name
,username
和password
)@FarhangAmary服务器是XElement
对象。请参阅上的MSDN文档,以了解如何访问属性、子级、子体以及与XML文档中的元素相对应的其他数据。是的,而且,我对您的代码进行了一些修改,我可以按以下方式检索属性:weill@FarhangAmary例如,要获取name
属性的值,您可以使用server.Attribute(“name”).Value
@farangamary我刚才解释了如何访问server
节点的属性,您在评论中提到了这些属性。关于“我告诉过你的答案不完整”,我的答案到底遗漏了什么?这是100%错误的,它只返回子项(servicename
s),而不返回属性,比如(name
,username
和password
)@FarhangAmary服务器是XElement
对象。请参阅上的MSDN文档,以了解如何访问属性、子级、子体以及与XML文档中的元素相对应的其他数据。是的,而且,我对您的代码进行了一些修改,我可以按以下方式检索属性:weill@FarhangAmary例如,要获取name
属性的值,您可以使用server.Attribute(“name”).Value
@farangamary我刚才解释了如何访问server
节点的属性,您在评论中提到了这些属性。关于“我告诉你的答案不完整”,我的答案到底遗漏了什么?