我試圖選擇使用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