我们正在创建一个系统,将一些数据输出到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标签的信息。但是,有角度的括号正在转换为<
和>
我已经研究了禁用Outout Escaping的方法,但到目前为止只能找到对XSLT表的引用。我也尝试了@"<[CDATA["
字符串,但又没有运气。
任何帮助将不胜感激!
答案 0 :(得分:5)
您将标记与内容混淆。
当您将字符串"<![CDATA[ ... ]]>"
分配给该值时,您说这是您希望放在其中的内容。 XmlSerializer
没有,实际上也不应该尝试从这个内容推断任何标记语义,只是根据正常规则将其转义。
如果您想要CDATA 标记,则需要明确指示序列化程序执行此操作。有关如何执行此操作的一些示例是here。
答案 1 :(得分:0)
您是否尝试过更改
report.header = "<[CDATA[" + header.Header + "]]>";
到
report.header = "<![CDATA[" + header.Header + "]]>";