如何在C#中递归搜索XML文件?

问题描述 投票:0回答:1

我想在XML文件中搜索名称为“ Reference”的节点。这些节点的内部Text是其他xml文件。我也想为相同的节点解析这些xml文件(“参考”)。我使用一些方法来设置找到的引用的名称和路径,但是我不知道如何递归进行。我使用c#dotnet。

该类,我在其中搜索并设置在xml中找到的引用的名称和路径

    {
        public SetReferences(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(args[0]);
            XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
            ns.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003");
            XmlNodeList nodelist = doc.SelectNodes("//msbld:Reference", ns);
            foreach (XmlNode node in nodelist)
            {

                var file = new FileInfo(node.InnerText);
                AnalyzedAssembly analyzedAssembly = new AnalyzedAssembly
                    {
                        AssemblyName = file.Name,
                        AssemblyFile = file
                    };


                    Console.WriteLine(analyzedAssembly.AssemblyName);
                    Console.WriteLine(analyzedAssembly.AssemblyFile);



            }
        }
    }

带有我的方法的类

public class AnalyzedAssembly
    {
        public string AssemblyName { get; set; }
        public FileInfo AssemblyFile { get; set; }        
        public List<AnalyzedAssembly> ChildDepencies { get; } = new List<AnalyzedAssembly>();

    }

这是我的主

class Program
    {

        static void Main(string[] args)
        {
            new SetReferences(args);

            Console.WriteLine("\nPress any key to exit.");
            Console.ReadKey();
        }
   }
c# xml recursion search
1个回答
0
投票

由于我不知道这些方法的确切语法,所以我只能提供一些描述...因此,尝试将实际搜索分离为方法本身,即方法为[[bar,该方法将节点列表作为输入,与找到的节点一起使用,处理内部文本到节点并在所有子节点上调用自身符合条件的。因此,您首先要做好所有准备工作,然后调用单独的方法bar一次。

编辑:我没有编写代码或其他任何内容,因此可能会出现一些错误。我认为,这可能有助于进一步发展。

class Program { static void Main(string[] args) { new SetReferences(args); Console.WriteLine("\nPress any key to exit."); Console.ReadKey(); } private SetReferences(string[] args) { XmlDocument doc = new XmlDocument(); doc.Load(args[0]); XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable); ns.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNodeList nodelist = doc.SelectNodes("//msbld:Reference", ns); HandleNodes(nodelist); } private HandleNodes(XmlNodeList[] nodes) { foreach (XmlNode node in nodelist) { var file = new FileInfo(node.InnerText); AnalyzedAssembly analyzedAssembly = new AnalyzedAssembly { AssemblyName = file.Name, AssemblyFile = file }; Console.WriteLine(analyzedAssembly.AssemblyName); Console.WriteLine(analyzedAssembly.AssemblyFile); // Get a new nodelist from the inner XML // and call HandleNodes on this new nodelist here. } } } public class AnalyzedAssembly { public string AssemblyName { get; set; } public FileInfo AssemblyFile { get; set; } public List<AnalyzedAssembly> ChildDepencies { get; } = new List<AnalyzedAssembly>(); }

© www.soinside.com 2019 - 2024. All rights reserved.