名称中不能包含hex值“0x3A”的“:”字符

我有一个包含它的元素的XML文件

<ab:test>Str</ab:test> 

当我尝试使用代码访问它时:

 XElement tempElement = doc.Descendants(XName.Get("ab:test")).FirstOrDefault(); 

这给了我这个错误:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。 —> System.Xml.XmlException:名称中不能包含“:”字符(hex值0x3A)。

我应该如何访问它?

如果你想使用命名空间,LINQ to XML使得这非常简单:

 XNamespace ab = "http://whatever-the-url-is"; XElement tempElement = doc.Descendants(ab + "test").FirstOrDefault(); 

在文档中查找xmlns:ab=...部分,以找出哪个名称空间URI“ab”引用。

尝试把你的名字空间放在{}如下所示:

 string xfaNamespace = "{http://www.xfa.org/schema/xfa-template/2.6/}"; 

我有同样的错误。 我发现我正在添加代码…

 var ab = "http://whatever-the-url-is"; 

但是ab被确定为一个string。 这导致了OP报告的错误。 我使用了实际的数据typesXNamespace,而不是使用VAR关键字。

 XNamespace ab = "http://whatever-the-url-is"; 

…问题就消失了。

Get方法的重载可能需要考虑命名空间。 尝试这个:

 XElement tempElement = doc.Descendants(XName.Get("test", "ab")).FirstOrDefault(); 

尝试从文档中获取命名空间

 var ns = doc.Root.Name.Namespace;