C#怎么用LINQ to XML创建带CDATA的节点

11次阅读

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

C#怎么用LINQ to XML创建带CDATA的节点

在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,而idtitle仍是标准XML结构。

基本上就这些。核心就一条:用XCData实例,别用字符串硬凑。

text=ZqhQzanResources