繁体   English   中英

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

[英]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标签的信息。 但是,尖括号被转换为&lt; &gt;

我已经研究了禁用Outs Escaping的方法,但是到目前为止只能找到对XSLT工作表的引用。 我也尝试了@"<[CDATA["和字符串,但是再次没有运气。

任何帮助,将不胜感激!

您将标记与内容混淆了。

当您指定字符串"<![CDATA[ ... ]]>"的值,你说的是,你要摆在那里的内容 XmlSerializer不会(实际上也不应该)尝试从该内容中推断出任何标记语义,而只是按照常规规则对其进行转义。

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

您是否尝试过改变

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

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

转换XML <!--CDATA to DataTable C#</div--><div id="text_translate"><p> 我有 Webservice SOAP 方法,它将 Json 作为输入参数。</p><pre> //For sample string jsonString = "[{"Year":"2020","UserId":"1","Comp":"20","DeptId":"32","CategoryId":"53","ItemId":"0"}]"; string[] processString = budget.BudgetTagNet(jsonString);</pre><p> 现在“budget.BudgetTagNet(jsonString)”返回前面提到的字符串数组,并且 SOAP 响应显示以下值: <a href="https://i.stack.imgur.com/ms2hp.png" rel="nofollow noreferrer">SOAP 响应结果</a></p><p>现在我想将返回的预算数组转换为 DataTable 以进一步用于我的项目,但我做不到。 实现这一目标的最佳方法是什么。 我尝试过的方法如下所述。</p><pre> string jsonString = CommonEnum.DataTableToJSON(Table); err.Message = "Json String is: " + jsonString; err.Insert(); string[] processString = budget.BudgetTagNet(jsonString); err.Message = "Budget service data is: " + processString[1]; err.Insert(); var XMLAsString = CommonEnum.SerializeXML(processString[1]); err.Message = "Converted XML To String data is: " + JsonConvert.SerializeObject(XMLAsString); err.Insert(); dt = (DataTable) JsonConvert.DeserializeObject(XMLAsString, (typeof(DataTable))); err.Message = "DataTable data: " + JsonConvert.SerializeObject(dt); err.Insert();</pre><p> 最后插入数据库中的数据,如上述方法是:<a href="https://i.stack.imgur.com/zSY2Q.png" rel="nofollow noreferrer">插入的数据库值</a></p></div>

[英]Convert XML <!CDATA to DataTable C#

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 C# 中的 XML CDATA 读取 具有cdata的转义xml,同时也具有转义数据值和标记 使用C#的XML中的CDATA 从文件读取时,C#双引号路径名被转义 从C#写入xml 从包含HTML标签的xml中读取CDATA C#:xml CData中的字节数组 转换XML <!--CDATA to DataTable C#</div--><div id="text_translate"><p> 我有 Webservice SOAP 方法,它将 Json 作为输入参数。</p><pre> //For sample string jsonString = "[{"Year":"2020","UserId":"1","Comp":"20","DeptId":"32","CategoryId":"53","ItemId":"0"}]"; string[] processString = budget.BudgetTagNet(jsonString);</pre><p> 现在“budget.BudgetTagNet(jsonString)”返回前面提到的字符串数组,并且 SOAP 响应显示以下值: <a href="https://i.stack.imgur.com/ms2hp.png" rel="nofollow noreferrer">SOAP 响应结果</a></p><p>现在我想将返回的预算数组转换为 DataTable 以进一步用于我的项目,但我做不到。 实现这一目标的最佳方法是什么。 我尝试过的方法如下所述。</p><pre> string jsonString = CommonEnum.DataTableToJSON(Table); err.Message = "Json String is: " + jsonString; err.Insert(); string[] processString = budget.BudgetTagNet(jsonString); err.Message = "Budget service data is: " + processString[1]; err.Insert(); var XMLAsString = CommonEnum.SerializeXML(processString[1]); err.Message = "Converted XML To String data is: " + JsonConvert.SerializeObject(XMLAsString); err.Insert(); dt = (DataTable) JsonConvert.DeserializeObject(XMLAsString, (typeof(DataTable))); err.Message = "DataTable data: " + JsonConvert.SerializeObject(dt); err.Insert();</pre><p> 最后插入数据库中的数据,如上述方法是:<a href="https://i.stack.imgur.com/zSY2Q.png" rel="nofollow noreferrer">插入的数据库值</a></p></div> 在C#中将Saxon的XdmNode写入流时如何包含CDATA 编写xml并使用xample xml输出将其读回c#
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM