问题描述
|
var count = (from p in xmlDoc.Descendants(\"env:SE04Overprinting\")
select p).Count();
引发异常(有点,到达那里时会崩溃,但是使用手表会显示此错误)
xmlDoc.Descendants(\"env:SE04Overprinting\")
\'\“ env:SE04Overprinting \” \'引发了类型为\'System.Xml.XmlException \'的异常System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>
我对这个错误做了一些检查,但没有发现任何东西,然后尝试摆脱冒号:
var count = (from p in xmlDoc.Descendants(\"env\")
select p).Count();
这可行。解决此问题的唯一方法就是从文件中删除冒号吗?
解决方法
如果您的XML正确声明了名称空间,则可以执行以下操作:
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>
由于bar
在env
名称空间内,因此您可以像这样检索其值:
XDocument xdoc = XDocument.Load(\"test.xml\");
XNamespace env = \"http://foo.bar\";
string bar = xdoc.Descendants(env+\"bar\").First().Value; //returns test
确保ѭ9声明与XML中名称空间的值完全匹配。
, 您似乎正在考虑将该冒号作为要检索的元素名称的一部分。并非如此,它是名称空间前缀和本地名称之间的分隔符。
如果没有名称空间声明,则“ 10”是没有意义的。您需要在本地名称(实际情况为\“ SE04Overprinting \”)前面加上实际的名称空间(在要查找的节点上方某处查找xmlns:env=
)。
请参阅XName文档中的“在名称空间中创建XName”部分。