在 C# 中创建 CDATA 节点须使用 XCData 类显式包装内容并作为 XElement 子节点添加,不能直接用字符串或赋值给 Value 属性;示例:new XElement(“description”, new XCData(“Hello & World!”))。

在 C# 中用 LINQ to XML 创建带 CDATA 的节点,关键不是直接用 XElement,而是要用XCData 类显式包装内容,并作为子节点添加到目标元素中。
正确创建 CDATA 节点的方法
XCData是专门用于表示 CDATA 节的类型,它必须作为 XElement 的子节点存在,不能直接作为根或独立对象写入文档。常见错误是试图把字符串直接标记为 CDATA,其实必须“包裹”进去。
- 创建一个
XElement(比如) - 用
new XCData("你的 HTML 或特殊字符")构造 CDATA 内容 - 把这个
XCData对象传给XElement的构造函数或用Add()方法添加
完整代码示例
下面这段代码生成一个包含 CDATA 的 XML 片段:
var doc = new XDocument(new XElement("root", new XElement("description", new XCData("Hello & World!")))); Console.WriteLine(doc.ToString());
输出结果会是:
Hello & World!]]>
注意:原始字符串中的 和&不会被转义——这正是 CDATA 的作用。
常见误区提醒
- 不要 对字符串调用
.ToString()再塞进XElement——那只是普通文本,会被自动转义 - 不要 用
XElement.Value = new XCData(……)——Value只接受字符串,赋值会调用ToString()丢掉 CDATA 语义 - 如果已有
XElement,可用element.Add(new XCData("……"))追加,但注意 CDATA 会成为子节点;若想替换全部内容,先element.RemoveAll()再Add()
配合属性和其他节点一起使用
CDATA 可以和普通子元素、属性共存:
var item = new XElement("item", new XAttribute("id", "101"), new XElement("title", "Intro"), new XElement("body", new XCData("First para
")));
这样生成的 内就是纯 CDATA,而 id 和title仍是标准 XML 结构。
基本上就这些。核心就一条:用 XCData 实例,别用字符串硬凑。