You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XName与命名空间操作XML时触发异常的技术求助

解决XElement获取命名空间元素时的"字符':'不能用于名称中"异常

这个问题我之前踩过坑,核心是你对XElement处理XML命名空间的方式理解错了——直接把命名空间字符串和元素名拼接的做法是不对的,XName(XML元素的名称类型)的正确格式是{命名空间URI}元素名,而不是用冒号分隔的字符串,这就是你触发异常的原因。

问题根源

你的field元素带有默认命名空间xmlns="http://anUrl",这意味着它下面的value元素也继承了这个命名空间。但你用nameSpace + "value"的方式构造元素名,要么会生成http://anUrlvalue(格式完全错误),要么如果代码里不小心加了冒号(比如nameSpace + ":" + "value"),就会生成http://anUrl:value,这种格式不符合XName的规范,自然会报错。

正确解决方案

我们需要用XNamespace类型来合法构造带命名空间的元素名,有两种常用方式:

方式1:显式定义命名空间

先创建XNamespace对象,再和元素名组合:

// 定义命名空间
XNamespace ns = "http://anUrl";
// 用XNamespace + 元素名得到合法的XName
var test = field.Element(ns + "value").Value;

方式2:从元素获取默认命名空间

如果不想硬编码命名空间字符串,可以直接从field元素获取它的默认命名空间,更灵活:

// 获取field元素的默认命名空间
var defaultNs = field.GetDefaultNamespace();
// 同样组合成合法XName
var test = field.Element(defaultNs + "value").Value;

补充说明

  • 你不需要额外处理CDATA内容,XElement.Value属性会自动提取CDATA块里的文本内容,所以最终test的值会是aName,完全符合预期。
  • 记住:所有带命名空间的XML元素,在LINQ to XML里都必须用XNamespace来构造XName,直接字符串拼接几乎都会出错。

内容的提问来源于stack exchange,提问作者Daniele Sartori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:08:58