C# Linq到XML可以使用冒号吗?

C# Linq到XML可以使用冒号吗?,c#,linq-to-xml,C#,Linq To Xml,抛出异常(在某种程度上,它在到达那里时崩溃,但使用手表会显示此错误) “env:SE04Overprinting”引发了类型为“System.Xml.XmlException”的异常System.Collections.Generic.IEnumerable 我仔细查看了一下这个错误,但没有发现任何东西,然后尝试去除冒号: xmlDoc.Descendants("env:SE04Overprinting") 这很有效。将冒号从文件中去掉是唯一的解决方法吗?如果XML正确声明了名称空间,则可以执

抛出异常(在某种程度上,它在到达那里时崩溃,但使用手表会显示此错误)

“env:SE04Overprinting”引发了类型为“System.Xml.XmlException”的异常
System.Collections.Generic.IEnumerable

我仔细查看了一下这个错误,但没有发现任何东西,然后尝试去除冒号:

xmlDoc.Descendants("env:SE04Overprinting")

这很有效。将冒号从文件中去掉是唯一的解决方法吗?

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

var count = (from p in xmlDoc.Descendants("env")
select p).Count();
示例:

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

确保
XNamespace
声明与XML中名称空间的值完全匹配。

您似乎认为冒号是要检索的元素名称的一部分。它不是,而是命名空间前缀和本地名称之间的分隔符

没有名称空间声明,
env:
就没有意义。您需要使用实际名称空间(查找
xmlns:env=
,在您要查找的节点上方的某个位置)作为本地名称的前缀(“SE04Overprinting”)


请参阅

中的部分:在名称空间中创建XName,该部分不是分号。这是一个冒号。如果把正确的名字记下来,可能会有帮助。
XNamespace env = "http://namespaceinXml";
var count = (from p in xmlDoc.Descendants(env + "SE04Overprinting")...
<foo xmlns:env="http://foo.bar">
  <env:bar>test</env:bar>
</foo>
XDocument xdoc = XDocument.Load("test.xml");
XNamespace env = "http://foo.bar";
string bar = xdoc.Descendants(env+"bar").First().Value; //returns test