XmlException при добавлении строки XML в качестве значения в теле запроса XML SOAP

#c# #xml #soap #opc

#c# #xml #soap #opc

Вопрос:

Я пишу приложение, которое использует XML SOAP. Код, который записывает запрос, к сожалению, не в моих руках, поскольку это DLL-файл, который был предоставлен только мне. Я скачал dotPeek от Jetbrain, чтобы декомпилировать DLL-файл и посмотреть на код, там я обнаружил, что тело запроса сообщения soap записывается как таковое

 string message = "<Value>"   myValue   "</Value>";
  

а затем анализируется как XElement впоследствии.

Теперь это работает большую часть времени, поскольку большинство запросов принимают обычные значения (например. <Value>true</Value> ). Но в технологии xml, над которой мы работаем, есть определенный протокол, по которому мы должны передавать целые строки xml в качестве значения, например, так

 string myValue = "<?xml version="1.0" encoding="utf-8"?><Foobar ID="123" />";
  

Это выдает ошибку:

Неожиданное объявление XML. Объявление XML должно быть первым узлом в документе, и перед ним не должно быть пробелов.

Как мое результирующее тело xml будет выглядеть:

 <Value><?xml version="1.0" encoding="utf-8"?><Foobar ID="123" /></Value>
  

Возможно ли мне каким-либо образом передать эту строку XML, избегая ошибки? Я пишу все это на C #. Спасибо за помощь.

Ответ №1:

Наконец-то нашел ответ через пару часов. Самым быстрым решением было бы преобразовать начальный и конечный теги в символьные объекты

 string myValue = "<?xml version="1.0" encoding="utf-8"?><Foobar ID="123" />";
myValue = myValue.Replace("<", "amp;<").Replace(">", "amp;>");
  

Вы также можете использовать

  • HttpUtility.HtmlEncode
  • System.Net.WebUtility.HtmlEncode