Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析全局节点内的多个xml节点和子节点?_C#_Xml - Fatal编程技术网

C# 解析全局节点内的多个xml节点和子节点?

C# 解析全局节点内的多个xml节点和子节点?,c#,xml,C#,Xml,如何在一个XML文件中解析多个节点和子节点? 以下是文件结构: 我正在尝试为这个做一个读取器解析器,他成功地读取了对象和属性键, 但我不知道如何以这种格式读取节点及其子节点(如xml示例) 我的读者是: XmlDocument document=新的XmlDocument(); 文件加载(文件名); foreach(document.GetElementsByTagName(“对象”)中的XmlNode节点) { ushort id=ushort.Parse(node.Attributes[

如何在一个XML文件中解析多个节点和子节点? 以下是文件结构:


我正在尝试为这个做一个读取器解析器,他成功地读取了对象和属性键, 但我不知道如何以这种格式读取节点及其子节点(如xml示例) 我的读者是:

XmlDocument document=新的XmlDocument();
文件加载(文件名);
foreach(document.GetElementsByTagName(“对象”)中的XmlNode节点)
{
ushort id=ushort.Parse(node.Attributes[“id”].InnerText);
//做一些事情
foreach(node.Attributes中的xmldattribute attr)
{
开关(attr.Name.ToLower())
{
案例“名称”:
//做事
打破
案例“param”:
//做事
打破
}
}
if(node.HasChildNodes)
{
foreach(node.ChildNodes中的XmlNode attrNode)
{
if(attrNode.Attributes!=null&&
attrNode.Attributes.Count>0&&
attrNode.Attributes[“key”]!=null&&
attrNode.Attributes[“value”!=null)
{
字符串值=attrNode.Attributes[“value”].InnerText;
开关(attrNode.Attributes[“key”].InnerText.ToLower())
{
案例“测试”:
//做有价值的事情
打破
}
}
}
}

请问,对于这种情况下的XML解析节点和子节点,有什么C#解决方案吗?我认为
nodeList=root.SelectNodes()
-在这方面不是更好的主意。
-是对象的子节点,这有一个非静态(对于每个对象-不同)类型的子对象。有什么想法吗?

递归函数可以工作吗

static void Main() {
    XmlDocument doc = new XmlDocument();
    doc.Load("test.xml");

    ReadNode(doc.GetElementsByTagName("object")[0]);
    Console.ReadLine();
}

static void ReadNode(XmlNode node) {
        //Do something with each Node
        if(node.Attributes.Count > 0) {
            foreach(XmlAttribute attr in node.Attributes) {
                //Do Something with each Attribute
            }
        }
        if(node.HasChildNodes == true) {
            foreach(XmlNode chlnode in node.ChildNodes) {
                ReadNode(chlnode);
            }
        }
    }

您可以使用
XmlNode.Name
来了解您正在处理的节点。

不使用XmlDocument代替XmlDocument的任何原因(在我给出使用XDocument的完整答案之前)?XmlDocument没有具体的原因。但我很乐意看到,如何在XDocument上实现这一点!学习-永远不会太迟。您知道可以使用XPath选择节点…对吗?XmlNodeList MyNodes=XDoc.SelectNodes(“//子对象2 |//子对象3”);您想要输出什么?您已经展示了收集值的尝试,但除了要输出的值之外,没有显示其他值。我将读取这些数据,并将每个对象及其子对象添加到对象列表中。每个对象都有id和其他参数,类中字典的一些属性和子对象。是的,这是使用递归模式的想法。我将我试试这个。