如何在 C# 中将子节点添加到肥皂信封?

Posted

技术标签:

【中文标题】如何在 C# 中将子节点添加到肥皂信封?【英文标题】:How do I add child node to soap envelope in C#? 【发布时间】:2021-11-27 11:55:16 【问题描述】:

要使用网络服务,我需要在soapEnvelope 中插入一个子节点,作为Body 节点的第一个子节点。然后我想在这个节点中导入一个 Xml 文档。 但是,它失败了,无论我做什么,它都会成为与我的导入并行的兄弟节点。我究竟做错了什么?这是我的代码(importeddoc 是传入的 xml 文档)

    XmlDocument soapEnvelope = new XmlDocument();
    soapEnvelope.LoadXml("<soapenv:Envelope xmlns:soapenv = 
    \"http://schemas.xmlsoap.org/soap/envelope/\" 
    xmlns:xd=\"http://www.w3.org/2000/09/xmldsig#\"> 
    </soapenv:Envelope>");
    XmlNode headernode = soapEnvelope.CreateNode("element", 
   "soapenv:Header", "http://schemas.xmlsoap.org/soap/envelope/");
    XmlNode bodynode = soapEnvelope.CreateNode("element", 
   "soapenv:Body", "http://schemas.xmlsoap.org/soap/envelope/");
    XmlElement root = soapEnvelope.DocumentElement;
    root.AppendChild(headernode);
    XmlNamespaceManager nsmgr = new 
    XmlNamespaceManager(importeddoc.NameTable);
    nsmgr.AddNamespace("myextranodens", "http://....");
    
    XmlNode containernode = 
    importeddoc.SelectSingleNode("/myimportdata", nsmgr);
    XmlNode importNode = soapEnvelope.ImportNode(containernode, 
    true);
    XmlNode myextranode = 
   bodynode.AppendChild(soapEnvelope.CreateElement("myextranodename"));
    
    XmlNode final = myextranode.AppendChild(importNode);
    bodynode.AppendChild(final);
    root.AppendChild(bodynode);
    return soapEnvelope;

我想要这样:

<soapenv:Body>
    <myextranodename>
     <myimportdata>
    </myextranodename>
</soapenv:Body>

.. 但现在去:

<myextranodename></myextranodename>
<myimportdata>

我做错了什么?感谢您的帮助。

【问题讨论】:

【参考方案1】:

啊!我必须删除最后一个 bodynode 附加子节点:

bodynode.AppendChild(final);

【讨论】:

以上是关于如何在 C# 中将子节点添加到肥皂信封?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TXMLDocument (Delphi 2006) 手动构建肥皂信封

如何使用目标 c 从 xml 信封中提取 xml 肥皂体?

如果命名空间声明在 SOAP 信封上,如何使用 JAXB 解组 SOAP 响应?

将 XmlNode 添加到 XmlElement

如何将XML子节点添加到父节点c#

使用soap4r时出现问题,无法将命名空间、编码样式添加到soap信封