在C#中写入XML时停止输出转义的CDATA标记

时间:2010-06-11 10:24:48

标签: c# xml cdata

我们正在创建一个系统,将一些数据输出到XML模式。此架构中的某些字段需要保留其格式,因为它将由最终系统解析为可能的Word文档布局。为此,我们在App.Config文件中使用<![CDATA[Some formatted text]]>标记,然后将其放入我们架构中xsd.exe生成的类中的相应属性字段中。理想情况下,格式化不会出问题,但遗憾的是这就是系统的运行方式。

App.Config部分如下所示:

<header>
<![CDATA[Some sample formatted data]]>
</header>

数据分配如下:

HeaderSection header = ConfigurationManager.GetSection("header") as HeaderSection;
report.header = "<[CDATA[" + header.Header + "]]>";

最后,Xml输出按如下方式处理:

xs = new XmlSerializer(typeof(report));
fs = new FileStream (reportLocation, FileMode.Create);
xs.Serialize(fs, report);
fs.Flush();
fs.Close();

理论上,这应该在最终的Xml中产生一个部分,其中包含围绕它的CDATA标签的信息。但是,有角度的括号正在转换为&lt;&gt;

我已经研究了禁用Outout Escaping的方法,但到目前为止只能找到对XSLT表的引用。我也尝试了@"<[CDATA["字符串,但又没有运气。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:5)

您将标记与内容混淆。

当您将字符串"<![CDATA[ ... ]]>"分配给该值时,您说这是您希望放在其中的内容XmlSerializer没有,实际上也不应该尝试从这个内容推断任何标记语义,只是根据正常规则将其转义。

如果您想要CDATA 标记,则需要明确指示序列化程序执行此操作。有关如何执行此操作的一些示例是here

答案 1 :(得分:0)

您是否尝试过更改

report.header = "<[CDATA[" + header.Header + "]]>";

report.header = "<![CDATA[" + header.Header + "]]>";