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

发布时间 - 2026-01-01 00: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 规范本身不支持属性含 CDATA)

基本写法示例

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

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

输出结果为:


  

常见注意事项

  • 不要用字符串拼接模拟 CDATA:例如 new XElement("node", "") 会导致内容被当作普通文本,& 被双重转义,最终不是有效 CDATA
  • XCData 不影响查询或遍历逻辑:读取时,XElement.Value 仍返回解码后的内容(与普通文本一致),若需区分原始 CDATA,应检查节点类型:node is XCData
  • 保存时默认保留 CDATA:使用 XDocument.Save()XElement.ToString() 时,XCData 节点会正确序列化为 CDATA 区段

读取时识别 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'
    }
}


# node  # c#  # xml  # 字符串  # 继承  # linq  # 遍历  # 若需  # 已有  # 不支持  # 因其  # 创建一个  # 不要用  # 时需  # 特殊字符  # 序列化 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel如何处理CORS跨域请求?(配置示例)  如何正确下载安装西数主机建站助手?  如何在IIS7上新建站点并设置安全权限?  Android滚轮选择时间控件使用详解  Java垃圾回收器的方法和原理总结  nodejs redis 发布订阅机制封装实现方法及实例代码  详解jQuery中基本的动画方法  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  如何在阿里云虚拟服务器快速搭建网站?  详解CentOS6.5 安装 MySQL5.1.71的方法  JS经典正则表达式笔试题汇总  如何快速搭建高效简练网站?  如何构建满足综合性能需求的优质建站方案?  如何用虚拟主机快速搭建网站?详细步骤解析  jQuery validate插件功能与用法详解  JavaScript Ajax实现异步通信  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何正确选择百度移动适配建站域名?  Laravel怎么使用Intervention Image库处理图片上传和缩放  Laravel观察者模式如何使用_Laravel Model Observer配置  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  *服务器网站为何频现安全漏洞?  详解Huffman编码算法之Java实现  如何确认建站备案号应放置的具体位置?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  如何用5美元大硬盘VPS安全高效搭建个人网站?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  如何用景安虚拟主机手机版绑定域名建站?  android nfc常用标签读取总结  如何彻底删除建站之星生成的Banner?  JS实现鼠标移上去显示图片或微信二维码  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel中的Facade(门面)到底是什么原理  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何在景安服务器上快速搭建个人网站?  如何在宝塔面板中创建新站点?  如何有效防御Web建站篡改攻击?  如何在香港服务器上快速搭建免备案网站?