Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using the XElement.Elements method, can I find elements with wildcard namespace but the same name?

Tags:

c#

xml

Trying to do a simple parse of an XML document. What's the easiest way to pull out the two PropertyGroups below?

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     1
  </PropertyGroup>
  <PropertyGroup xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     2
  </PropertyGroup>
</Project>

I have been trying to use XElement.Elements(XName) but to do so I need to prefix PropertyGroup with the xmlns. The issue is that I don't care about the name space and if it changes in future I would still like all PropertyGroups to be retrieved.

 var xml = XElement.Load(fileNameWithPath);
 var nameSpace = xml.GetDefaultNamespace();

 var propertyGroups= xml.Elements(nameSpace + "PropertyGroup");

Can you improve on this code such that I don't need to prepend with nameSpace? I know I can essentially just reimplement the Elements method but I was hoping there was some way to pass a wildcard namespace?

Thanks,

Gavin

like image 542
gav Avatar asked Apr 22 '10 14:04

gav


1 Answers

Does this work for you?

xml.Elements().Where(e => e.Name.LocalName == "PropertyGroup")
like image 113
Rob Fonseca-Ensor Avatar answered Oct 14 '22 21:10

Rob Fonseca-Ensor