在XML SOAP请求正文中添加XML字符串作为值时出现XmlException

时间:2019-04-03 00:29:17

标签: c# xml soap opc

我正在编写一个利用XML SOAP的应用程序。不幸的是,写入请求的代码是我无法控制的,因为它是仅提供给我的DLL文件。我下载了Jetbrain的dotPeek来反编译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 个答案:

答案 0 :(得分:0)

几个小时后终于找到了答案。最快的解决方案是将开始和结束标记转换为character entities

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

您也可以选择使用

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