2

我们正在创建一个将一些数据输出到 XML 模式的系统。此架构中的某些字段需要保留其格式,因为最终系统会将其解析为可能的 Word 文档布局。为此,我们在<![CDATA[Some formatted text]]>App.Config 文件中使用标签,然后将其放入从我们的模式生成的 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["使用琴弦,但还是没有运气。

任何帮助,将不胜感激!

4

2 回答 2

5

您将标记与内容混淆了。

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

如果您想要 CDATA标记,那么您需要明确指示序列化程序这样做。这里有一些如何做到这一点的例子。

于 2010-06-11T10:37:32.663 回答
0

你试过改变

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

report.header = "<![CDATA[" + header.Header + "]]>";
于 2010-06-11T10:28:43.013 回答