2010-06-11 93 views
2

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

在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["与字符串,但再次没有运气。

任何帮助,将不胜感激!

+0

为了获得代码格式(允许'<'等)内联在段落中,您可以使用反引号(如在我的编辑中) – AakashM 2010-06-11 10:28:14

回答

4

你混淆标记的内容。

当您将字符串"<![CDATA[ ... ]]>"指定为该值时,您说的是您希望在其中放置的内容XmlSerializer没有,也不应该试图从这个内容推断任何标记语义,并根据正常规则简单地转义它。

如果你想要CDATA 标记那里,那么你需要明确地指示序列化器这样做。一些如何做到这一点的例子是here

+0

这似乎是最可能的解决方案。看起来很奇怪,我无法从App.Config中取出CDATA并直接传输它。尽管我可以看到你来自标记/内容问题。 Xsd类是自动生成的,因此比正常情况下将一个节点指定为[XmlIgnore](在您提供的链接中提及的方法)有点复杂,但希望它能正常工作。感谢您的建议! – Smallgods 2010-06-11 10:51:52

0

你有没有试图改变

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

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