':'字符,十六进制值0x3A,不能包含在名称中

时间:2010-04-04 19:06:21

标签: c# xml linq linq-to-xml

我有一个xml文件,其中包含像

这样的元素
<ab:test>Str</ab:test>  

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

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

它给了我这个错误:

  

System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---&GT; System.Xml.XmlException:':'字符,十六进制值0x3A,不能包含在名称中。

我该如何访问它?

6 个答案:

答案 0 :(得分:102)

如果要使用名称空间,LINQ to XML可以非常简单:

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

在文档中查找xmlns:ab=...部分,找出“ab”所指的命名空间URI。

答案 1 :(得分:21)

尝试将您的命名空间放在{ ... }中,如下所示:

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

答案 2 :(得分:12)

我遇到了同样的错误。我发现我正在添加代码......

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

...但是ab被确定为一个字符串。这导致OP报告的错误。我没有使用VAR关键字,而是使用实际数据类型XNamespace ...

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

......问题消失了。

答案 3 :(得分:6)

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

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

答案 4 :(得分:3)

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

var ns = doc.Root.Name.Namespace;

答案 5 :(得分:0)

删除 AndroidManifest.xmlAndroidManifest.xml.DISABLED 对我有用。