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

Sma*_*ods 2 c# xml cdata

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

App.Config部分如下所示:

<header>
<![CDATA[Some sample formatted data]]>
</header>
Run Code Online (Sandbox Code Playgroud)

数据分配如下所示:

HeaderSection header = ConfigurationManager.GetSection("header") as HeaderSection;
report.header = "<[CDATA[" + header.Header + "]]>";
Run Code Online (Sandbox Code Playgroud)

最后,Xml输出的处理如下:

xs = new XmlSerializer(typeof(report));
fs = new FileStream (reportLocation, FileMode.Create);
xs.Serialize(fs, report);
fs.Flush();
fs.Close();
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这应该在最终的Xml中产生一个部分,该部分周围包含带有CDATA标记的信息。然而,成角度的支架被转换成&lt;&gt;

我已经研究了禁用Outs Escaping的方法,但是到目前为止只能找到对XSLT工作表的引用。我也尝试过@"<[CDATA["使用琴弦,但还是没有运气。

任何帮助,将不胜感激!

Gre*_*ech 5

您将标记与内容混淆了。

当您将字符串分配给"<![CDATA[ ... ]]>"值时,就是说您要在其中放置的内容。,XmlSerializer并且(也不应)试图从该内容中推断出任何标记语义,而只是按照常规规则对其进行转义。

如果要在其中添加CDATA 标记,则需要明确指示串行器这样做。如何执行此操作的一些示例在此处