Linq to XML可以使用冒号吗?

And*_*ndy 2 c# linq-to-xml

var count = (from p in xmlDoc.Descendants("env:SE04Overprinting")
select p).Count();
Run Code Online (Sandbox Code Playgroud)

抛出异常(有点,它到达那里时崩溃,但使用手表显示此错误)

xmlDoc.Descendants("env:SE04Overprinting")
Run Code Online (Sandbox Code Playgroud)

'"env:SE04Overprinting"'引发了'System.Xml.XmlException'类型的异常 System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>

我做了一些关于这个错误但没有找到任何东西,然后试图摆脱冒号:

var count = (from p in xmlDoc.Descendants("env")
select p).Count();
Run Code Online (Sandbox Code Playgroud)

这很有效.将冒号从文件中剥离是唯一的方法吗?

Bro*_*ass 7

如果您的XML正确声明了命名空间,您可以执行以下操作:

XNamespace env = "http://namespaceinXml";
var count = (from p in xmlDoc.Descendants(env + "SE04Overprinting")...
Run Code Online (Sandbox Code Playgroud)

例:

<foo xmlns:env="http://foo.bar">
  <env:bar>test</env:bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

由于barenv命名空间内,您可以检索其值,如下所示:

XDocument xdoc = XDocument.Load("test.xml");
XNamespace env = "http://foo.bar";
string bar = xdoc.Descendants(env+"bar").First().Value; //returns test
Run Code Online (Sandbox Code Playgroud)

确保XNamespace声明 XML中的命名空间的值完全匹配.