Самый простой способ заменить недопустимый символ в атрибутах XML - PullRequest
1 голос
/ 17 ноября 2011

У меня проблема с рукописным 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, могут содержать недопустимый символ как <> или &.

Этот XML хранится в виде текста в SQL и выполняется сервером SQL с хранимой процедурой sp_xml_preparedocument для чтения в службах отчетов. Этот XML также может использоваться в качестве данных для создания в качестве веб-страницы.

Итак, какое самое быстрое и простое решение для решения этой проблемы кодирования, так как знаю, что я не могу переписать действительно совместимый XML (у меня нет на это времени), и этот XML используется во многих местах в моем проект (заменить символ будет проще всего, но он требует замены обратно в отчетах и ​​на веб-странице).

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Вы должны избежать их с их эквивалентами ASCII:

  1. '<' должно стать '<code>&#60;'
  2. '>' должно стать '&#62;'
  3. '&' должно стать '&#38;'

Нет известных мне ярлыков.

Не думаю, что ваша проблема связана с SQL. Магические символы в XML делают его плохо сформированным. Допустим ли созданный вами XML?

1 голос
/ 17 ноября 2011

Вы можете использовать SecurityElement.Escape

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

Это заменит < на &lt;, > на &gt; и т. Д.

Хотя вам действительно следует использовать XDocument для правильной сборки xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...