我在使用手写XML时遇到了麻烦。 XML由concat字符串生成,如下所示:
ReturnXML += "<agentchimique ";
ReturnXML += "id_prod=\"" + Produit.Id + "\" ";
ReturnXML += "nom_com_prod=\"" + Produit.NomComProd + "\" ";
ReturnXML += "nom_four=\"" + Produit.Fournisseur.NomFour + "\" ";
ReturnXML += "PhraseR=\"" + Produit.PhrasesR.Replace( "<br/>", "@" ) + "\" ";
ReturnXML += "PhraseS=\"" + Produit.PhrasesS.Replace( "<br/>", "@" ) + "\" ";
ReturnXML += "numfds_prod=\"" + Produit.NumfdsProd.ToString() + "\" ";
ReturnXML += "transverse_prod=\"" + Produit.TransverseProd.ToString() + "\" ";
这只是整个XML的一小部分,正如您所看到的,所有数据都在属性中...... 但是一些参数如Produit.PhrasesR或Produit.PhrasesS可以包含非法字符&lt; &GT;或&amp;。
此XML在SQL中以文本形式存储并由SQL Server执行,并在报表服务中读取存储过程sp_xml_preparedocument。 此XML也可用作生成网页的数据。
那么,解决这个编码问题的最快,最简单的解决方案是什么,因为知道我不能重写真正的兼容XML(我没有时间做这个),而且这个XML在我的很多地方使用项目(替换字符将是最简单的,但它需要替换报告和网页)。
感谢您的帮助。
答案 0 :(得分:1)
ReturnXML += "nom_four=\"" + SecurityElement.Escape(Produit.Fournisseur.NomFour) + "\" ";
这会将<
替换为<
,将>
替换为>
等。
虽然你真的应该使用XDocument来正确构建你的xml。
答案 1 :(得分:1)
你必须用它们的ASCII等价物来逃避它们:
<
”>
”&
”我所知道的没有捷径。
我认为您的问题不是SQL。 XML中的魔术字符使其形成不良。您创建的XML是否有效?