通八洲科技

C# Linq to XML如何创建CDATA节点

日期:2026-01-01 00:00 / 作者:月夜之吻
在 LINQ to XML 中必须使用 XCData 类创建 CDATA 节点,因其专用于表示 CDATA 区段且会自动序列化为标准格式;不能用于属性,读取时需通过 node is XCData 判断类型。

在 C# 的 LINQ to XML 中,不能直接用 XElementXAttribute 创建 CDATA 节点,因为 LINQ to XML 默认将文本内容视为普通文本节点(XText),会自动转义特殊字符(如 &)。要生成真正的 内容,必须使用 XCData 类。

使用 XCData 创建 CDATA 节点

XCData 是专门用于表示 CDATA 区段的 LINQ to XML 类型。它继承自 XNode,可作为子节点添加到 XElement 中。

基本写法示例

以下代码创建一个包含 CDATA 的 XML 元素:

XElement root = new XElement("root",
    new XElement("content",
        new XCData(" & special chars")
    )
);
Console.WriteLine(root.ToString());

输出结果为:


  

常见注意事项

读取时识别 CDATA 节点

若需在解析已有 XML 时判断某文本是否来自 CDATA,可遍历子节点并检查类型:

XElement elem = XElement.Parse("bold]]>");
foreach (XNode node in elem.Nodes())
{
    if (node is XCData cdata)
    {
        Console.WriteLine($"Found CDATA: '{cdata.Value}'");
        // 输出:Found CDATA: 'bold'
    }
}