首页 > 解决方案 > 如何迭代实际节点和后代?

问题描述

我有这个 xml 文件:

<Assemblies>
  <Assembly Name="MyMainAssambly.exe" Version="1.7.0.0" Path="x:\MyMainAssemby.exe" >
    <NeededAssemblies>
      <Assembly Name="Aseembly01.dll" Version="1.1.1.1" Path="x:\Assembly01.dll"/>
      <Assembly Name="Aseembly02.dll" Version="2.2.2.2" Path="x:\Assembly02.dll"/>
      <Assembly Name="Aseembly03.dll" Version="3.3.3.3" Path="x:\Assembly03.dll"/>
    </NeededAssemblies>
  </Assembly>
</Assemblies>

我想迭代所有这些来完成一些任务。所以我正在尝试使用此代码:

            XElement myMainAssembly = miDocumentoXml.Root.Elements("Assembly")
                .Where(x => x.Attribute("Name").Value == "MyMainAssembly.exe"
                        && x.Attribute("Version").Value.StartsWith("1.7.0.0"))
                .FirstOrDefault();



foreach (XElement nodeIterator in myMainAssembly.DescendantNodesAndSelf())
{
    //Do some code with the nodes Assembly01.dll, Assembly02.dll and Assembly, using the name, version and path.

    string miStrAssemblyName = nodeIterator .Attribute("Name").Value;
}

但是如果我调试并设置一个断点,我可以看到所有元素的属性 HasAttributes 都是 false。为什么?因为在 xml 中所有元素都有 3 个属性。事实上,在代码的第一部分,我得到了我的主程序集,我可以使用 Attribute("Name") 来获得主程序集的名称。但后来在 foreach 中我不能。

所以我想知道如何迭代元素并获取属性的信息。

谢谢。

标签: c#xml

解决方案


推荐阅读