System.Xml.XmlException:“':'字符,十六进制值 0x3A,不能包含在名称中。”

Posted

技术标签:

【中文标题】System.Xml.XmlException:“\':\'字符,十六进制值 0x3A,不能包含在名称中。”【英文标题】:System.Xml.XmlException: „The ':' character, hexadecimal value 0x3A, cannot be included in a name.”System.Xml.XmlException:“':'字符,十六进制值 0x3A,不能包含在名称中。” 【发布时间】:2021-08-27 09:38:11 【问题描述】:

我想在我的 xml 中创建类似这样的内容:

<root>
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  </xsd:schema>
</root>

我的代码现在看起来像这样:

XElement rootElement = new XElement("root");
XDeclaration xDeclaration = new XDeclaration("1.0", "utf-8", "true");
XElement xdsElement = new XElement("xsd:schema"); // Exception there!

我的例外:

System.Xml.XmlException: „':' 字符,十六进制值 0x3A, 不能包含在名称中。”

如何避免这个异常,也许有某种生成器来处理这些短语?

【问题讨论】:

冒号前的字符串为命名空间,冒号后为标签名。 Net 库不允许将命名空间作为标记名的一部分输入。 尝试XNamespace xsd = "http://www.w3.org/2001/XMLSchema",然后尝试new XElement(xsd + "schema"); 【参考方案1】:

正如@juharr 在 cmets 中所说,您需要先将其定义为 XNamespace,方法如下:

var ns_xsd = XNamespace.Get("http://www.w3.org/2001/XMLSchema");
var ns_msdata = XNamespace.Get("urn:schemas-microsoft-com:xml-msdata");

var root = new XElement("root", 
    new XElement(ns_xsd + "schema", 
        new XAttribute("id", "root"), 
        new XAttribute("xmlns", ""), 
        new XAttribute(XNamespace.Xmlns + "xsd", ns_xsd),
        new XAttribute(XNamespace.Xmlns + "msdata", ns_msdata),
        new XAttribute(ns_msdata + "IsDataSet", "true")));

【讨论】:

谢谢,你能告诉我如何处理这个:new XAttribute("msdata:IsDataSet", "true") @Obyi 逻辑是一样的,你需要使用 msdata 的 Uri 将其声明为命名空间,我做了一个编辑显示如何

以上是关于System.Xml.XmlException:“':'字符,十六进制值 0x3A,不能包含在名称中。”的主要内容,如果未能解决你的问题,请参考以下文章

System.Xml.XmlException:“':'字符,十六进制值 0x3A,不能包含在名称中。”

Web 服务调用导致 System.Xml.XmlException:'.',十六进制值 0x00

System.Xml.XmlException '根级别的数据无效,第 1 行,位置 1' 当我从 1 个 xml 文件更改为 5 时出现错误

System.Xml.XmlException: “=”是意外的标记。标记应为“;”

如果 XmlException.SourceUri 是只读的,那有啥好处?

检测 XML 的更好方法?