【问题标题】:XmlException when adding an XML string as a value in an XML SOAP request body在 XML SOAP 请求正文中添加 XML 字符串作为值时出现 XmlException
【发布时间】:2019-04-03 00:29:16
【问题描述】:

我正在编写一个使用 XML SOAP 的应用程序。不幸的是,编写请求的代码不在我的手中,因为它是一个仅提供给我的 DLL 文件。我下载了Jetbrain的dotPeek来反编译DLL文件并查看代码,发现soap消息请求体是这样写的

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

然后解析为 XElement。

现在这在大多数情况下都有效,因为大多数请求都接受正常值(例如&lt;Value&gt;true&lt;/Value&gt;)。但是我们正在研究的 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# 编写所有这些。感谢您的帮助。

【问题讨论】:

    标签: c# xml soap opc


    【解决方案1】:

    几个小时后终于找到了答案。最快的解决方案是将开始和结束标签转换为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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 2023-03-31
      相关资源
      最近更新 更多