使用xmlns属性(命名空间)查询XDocument我尝试从VisualStudio*.csproj文件中查询元素。我创建了一个简短的示例来说明问题://Workingstringxml1=@"";//不工作stringxml2=@"";XDocumentdoc=XDocument.Parse(xml2);foreach(doc.Descendants(“ItemGroup”)中的XElement元素){Console.WriteLine(element);字符串xml1工作正常,xml2不返回任何内容。这些字符串之间的唯一区别是文档根目录中的xmlns属性。如何查询包含xmlns属性的文档?为什么xml文档包含xmlns属性时会出现问题?为什么xml文档包含xmlns属性时会出现问题?它不是,如果您理解它的含义的话:)基本上您已经将“http://schemas.microsoft.com/developer/msbuild/2003”的默认名称空间URI应用于所有元素。所以在查询的时候,还需要指定那个命名空间。幸运的是,LINQtoXML使这变得非常简单:XNamespacens="http://schemas.microsoft.com/developer/msbuild/2003";XDocumentdoc=XDocument.Parse(xml2);foreach(doc.Descendants(ns+“ItemGroup”)中的XElement元素){Console.WriteLine(元素);不必事先知道名称空间。您可以编写适用于两种Xml的代码,因为您可以从XElement获取默认命名空间。XDocumentdoc=XDocument.Parse(xml2);XNamespacens=doc.Root.GetDefaultNamespace();foreach(doc.Descendants(ns+"ItemGroup")中的XElement元素){Console.WriteLine(element);我还写了一个扩展方法来解析任何XObject(XElement、XDocument等)中的XName。使用扩展方法而不是GetDefaultNamespace的优点是您不必检查是否已提供另一个命名空间。publicstaticXNameResolveName(thisXObjectxObj,XNamename){//如果没有添加命名空间,无论如何都使用默认命名空间if(string.IsNullOrEmpty(name.NamespaceName)){name=xObj.Document.Root.GetDefaultNamespace()+名称.LocalName;}返回名称;你可以像这样使用它XDocumentdoc=XDocument.Parse(xml2);foreach(doc.Descendants(doc.ResolveName(“ItemGroup”))中的XElement元素){Console.WriteLine(元素);我认为LINQtoXML是一个很棒的AP??I。但我认为很明显,如果我不提供命名空间,我总是指默认命名空间。我看不出任何LINQtoXML不会以这种方式运行的原因。这就是让我烦恼的缺点。作为LINQtoXML的初学者,我第一次忘记提供默认名称空间时,几个小时都不知道自己做错了什么。以上就是C#学习教程:使用xmlns属性(命名空间)查询XDocument共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
