2011-11-17 55 views
1

手写XML有问题。 XML是由CONCAT字符串产生,因为这:在XML属性中替换非法字符的最简单方法

  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可能包含非法字符<>或&。

该XML以文本形式存储在SQL中并由SQL服务器执行,存储过程sp_xml_preparedocument可在报表服务中读取。 该XML也可用作数据生成为网页。

那么,什么是解决这个编码问题的最快最简单的解决方案,因为我知道我不能重写一个真正的兼容XML(我没有任何时间),而且这个XML被用在许多地方我的项目(替换角色将是最简单的,但它需要在报告和网页中重新替换)。

感谢您的帮助。

回答

1

您可以使用SecurityElement.Escape

ReturnXML += "nom_four=\"" + SecurityElement.Escape(Produit.Fournisseur.NomFour) + "\" "; 

这将取代<&lt;>&gt;

虽然你真的应该使用XDocument正确地建立自己的XML。

+0

感谢您的SecurityElement.Escape,但我需要在报表服务中读取XML时反转此操作?如果是我会创建XML,我会使用XDocument,但我经常从懒惰的开发者检索旧项目:) –

+0

@ User.Anonymous我不确定。也许不会。你必须尝试一下。 – Ray

1

你必须与他们的ASCII等价物逃离他们:

  1. '<' 必须成为 '&#60;'
  2. '>' 必须成为 '&#62;'
  3. '&' 必须成为 '&#38;'

没有我知道的捷径。

我不认为你的问题是SQL。 XML中的魔法字符使其格式不正确。您创建的XML是否有效?

+0

XML不包含标题,它不符合W3C标准。并且问题出现在SQL sp中,并显示以下错误消息:6601:sp_xml_preparedocument:1:在XML文本附近的行号1上发生XML分析错误0xc00ce506。所以我需要一个没有数据字符错误的XML。 –