【发布时间】:2020-02-24 11:46:07
【问题描述】:
我想在 XML 文件中搜索名称为“Reference”的节点。 这些节点的内部文本是其他 xml 文件。我还想为相同的节点(“参考”)解析这些 xml 文件。
我使用一些方法来设置我找到的引用的名称和路径,但我不知道如何递归。
类,我在其中搜索并设置在 XML 中找到的引用的名称和路径
public class SetReferences
{
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();
}
}
XML 文件如下所示
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Reference Include="DataMatrix.net, Version=1.0.0.0>
<HintPath>..\packages\DataMatrix.net.0.4.2\lib\20\DataMatrix.net.dll</HintPath>
</Reference>
<Reference Include="Devart.Data, Version=5.0.1289.0>
<HintPath>..\..\lib\ExtLib\DevArt\Devart.Data.dll</HintPath>
</Reference>
我希望列出所有参考文献。每个参考都存在一个 xml 文件。我想在这些中搜索“References of the Reference”。
现在我得到了上面这个 XML 的所有引用,但是搜索不是递归的。
背景是我必须在项目中包含的所有引用的源代码中搜索 SQL 语句。为此,我首先需要所有参考资料。
【问题讨论】: