#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