我试图选择使用root.SelectNodes()
和XPath
的所有节点。有关参考,请参阅msdn-documentation。使用xpath选择具有属性的所有节点
在说明的following文档中,您还可以搜索包含属性的节点(如果这实际上是错误的理解,请纠正我)。
所以我用下面的代码行:
XmlNodeList nodes = projectDoc.DocumentElement.SelectNodes("descendant::Compile[attribute::Include]");
,我试图阅读以下数据:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<ItemGroup>
<Compile Include="ArrayExtensions.cs" />
<Compile Include="ArrayIterator.cs" />
<Compile Include="AutoInitializeAttribute.cs" />
<Compile Include="AutoInitializePriority.cs" />
<Compile Include="AutoRegisterAttribute.cs" />
<Compile Include="FormattableExtensions.cs" />
<Compile Include="Mathematics\PrimeNumbers.cs" />
</ItemGroup>
</Project>
正如上面的代码示例所示,我想所有包含Include-attribute的XmlNode。但是,当我执行我的代码时,nodes
包含0个元素。
我在这里做错了什么?
我强烈怀疑问题是命名空间 - 实际上您应该在'http:// schemas.microsoft.com/developer/msbuild/2003'命名空间中寻找'Compile'元素。是否有任何理由需要在XPath中执行此操作?使用LINQ to XML这将是微不足道的。 –
没有特别的理由不,如果你有更好的解决方案,将不胜感激!另外,我提供的问题的解决方案也很棒,仅用于学习目的。 – Matthijs