我想在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();
}
}
由于我不知道这些方法的确切语法,所以我只能提供一些描述...因此,尝试将实际搜索分离为方法本身,即方法为[[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>();
}