【问题标题】:The ':' character, hexadecimal value 0x3A, cannot be included in a name':' 字符,十六进制值 0x3A,不能包含在名称中
【发布时间】:2010-04-04 19:06:21
【问题描述】:

我有一个 xml 文件,其中包含其元素,例如

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

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

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

它给了我这个错误:

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

我应该如何访问它?

【问题讨论】:

  • 您当然有办法处理名称空间,因此您不必(或者在这种情况下,您不能)将它们放在名称中。你应该看看这个方向。
  • 不仅 XML 规范说 ":" 是 allowed for names(并且是名称的开头!),而且 XName 的 Get method 并没有记录它抛出 XmlException!
  • 参见stackoverflow.com/questions/8324960/… 以了解正确的命名空间处理。

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


【解决方案1】:

如果您想使用命名空间,LINQ to XML 让这一切变得非常简单:

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

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

【讨论】:

  • 它可以工作,但问题是 xmlns:ab 的值是根据时间戳动态生成的。我怎样才能获得它的价值?
  • @coure06: 命名空间 URI 是动态的?这很奇怪。但是,是的,您可以通过从声明它的任何元素中找到 XNamespace.Xmlns + "ab" 的属性值来获取它。
  • 有趣的是,这似乎不适用于较新的字符串模板语法,因此$"{ab}test" 给出了相同的错误
  • @Liam:我希望 - ab + "test" 没有执行字符串连接;它使用+(XNamespace, string) 运算符创建XName
【解决方案2】:

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

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

【讨论】:

  • 为什么要使用花括号?有什么好处?
  • 使用XNamespace 方法本质上只是为你做这件事。 .ToString 上的 XNamespace 显然只是为您正确格式化字符串。所以这是同样的事情,但以不同的方式完成,两者都没有好处
【解决方案3】:

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

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

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

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

...问题就解决了。

【讨论】:

    【解决方案4】:

    考虑到命名空间,您可能想尝试使用 Get 方法的重载。试试这个:

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

    【讨论】:

    • ab 不是这里的实际命名空间——它只是命名空间的别名。 (不幸的是,我不知道正确的术语。)LINQ to XML 使用XNamespace 使这变得容易。很少需要在 LINQ to XML 中显式调用 XName.Get
    【解决方案5】:

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

    var ns = doc.Root.Name.Namespace;
    

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多