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

cou*_*011 73 c# xml linq linq-to-xml

我有一个包含其元素的xml文件

<ab:test>Str</ab:test>  
Run Code Online (Sandbox Code Playgroud)

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

XElement tempElement = doc.Descendants(XName.Get("ab:test")).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

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

我该如何访问它?

Jon*_*eet 110

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

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

查找xmlns:ab=...文档中的一个部分,找出"ab"所指的命名空间URI.

  • @ coure06:名称空间URI是动态的吗?这很奇怪.但是,你可以通过从任何元素声明它的`XNamespace.Xmlns +"ab"`找到属性值来获得它. (6认同)
  • 它有效,但问题是xmlns:ab的值是基于时间戳动态生成的.我怎样才能获得它的价值? (2认同)
  • @Liam:我希望-`ab +“ test”`不执行字符串连接;它使用+(XNamespace,string)运算符来创建XName。 (2认同)

Ser*_*gan 21

尝试将您的命名空间放入{...... }就像这样:

string xfaNamespace = "{http://www.xfa.org/schema/xfa-template/2.6/}";
Run Code Online (Sandbox Code Playgroud)


bar*_*ker 16

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

var ab = "http://whatever-the-url-is";
Run Code Online (Sandbox Code Playgroud)

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

XNamespace ab = "http://whatever-the-url-is";
Run Code Online (Sandbox Code Playgroud)

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


Bla*_*ott 7

您可能想要尝试的Get方法有一个重载,它考虑了命名空间.试试这个:

XElement tempElement = doc.Descendants(XName.Get("test", "ab")).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)


Jas*_*ias 5

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

var ns = doc.Root.Name.Namespace;
Run Code Online (Sandbox Code Playgroud)