[英]Stop CDATA tags from being output-escaped when writing to XML in C#
我们正在创建一个将一些数据输出到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标签的信息。 但是,尖括号被转换为<
和>
我已经研究了禁用Outs Escaping的方法,但是到目前为止只能找到对XSLT工作表的引用。 我也尝试了@"<[CDATA["
和字符串,但是再次没有运气。
任何帮助,将不胜感激!
您将标记与内容混淆了。
当您指定字符串"<![CDATA[ ... ]]>"
的值,你说的是,你要摆在那里的内容 。 XmlSerializer
不会(实际上也不应该)尝试从该内容中推断出任何标记语义,而只是按照常规规则对其进行转义。
如果要在其中添加CDATA 标记 ,则需要明确指示串行器这样做。 如何执行此操作的一些示例在此处 。
您是否尝试过改变
report.header = "<[CDATA[" + header.Header + "]]>";
至
report.header = "<![CDATA[" + header.Header + "]]>";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.