c# – 使用xmlns属性(命名空间)查询XDocument

前端之家收集整理的这篇文章主要介绍了c# – 使用xmlns属性(命名空间)查询XDocument前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试从visual studio * .csproj文件查询元素.我创建了一个简单的例子来说明问题:
// Working
    string xml1 = @"<Project ToolsVersion='4.0'>
                      <ItemGroup Label='Usings'>
                        <Reference Include='System' />
                        <Reference Include='System.Xml' />
                      </ItemGroup>
                    </Project>"; 
    // Not working
    string xml2 = @"<Project ToolsVersion='4.0' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
                      <ItemGroup Label='Usings'>
                        <Reference Include='System' />
                        <Reference Include='System.Xml' />
                      </ItemGroup>
                    </Project>";

    XDocument doc = XDocument.Parse(xml2);

    foreach (XElement element in doc.Descendants("ItemGroup"))
    {
        Console.WriteLine(element);
    }

字符串xml1工作正常,xml2不返回任何东西.这些字符串之间的唯一区别是文档根目录中的xmlns属性.

如何查询包含xmlns属性的文档?
当xml文档包含xmlns属性时,为什么会出现问题?

解决方法

Why is it a problem when a xml document contains an xmlns attribute?

这不是,如果你明白这是什么意思:)基本上你已经应用了所有元素的默认命名空间URI“http://schemas.microsoft.com/developer/msbuild/2003”.所以当查询时,你也需要指定这个命名空间.幸运的是,LINQ to XML使得它非常简单:

XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
XDocument doc = XDocument.Parse(xml2);
foreach (XElement element in doc.Descendants(ns + "ItemGroup"))
{
    Console.WriteLine(element);
}

猜你在找的C#相关文章