如示例所示创建 xml 标头

Posted

技术标签:

【中文标题】如示例所示创建 xml 标头【英文标题】:creating xml header as in example 【发布时间】:2021-09-25 07:41:23 【问题描述】:

我不擅长xml理解,请帮助我 这是我需要的xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:ENRC-IDOC_939_DigiDocs:idm">
  <soapenv:Header />
  <soapenv:Body>
    <urn:mt_digidocs_fees>

这是我的代码

XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration( "1.0", "UTF-8", null );
XmlElement root = doc.DocumentElement;
doc.InsertBefore(xmlDeclaration, root);
XmlElement envelope = doc.CreateElement("soapenv","Envelope", "http://schemas.xmlsoap.org/soap/envelope/");
XmlAttribute urn = doc.CreateAttribute("xmlns","urn", "http://www.w3.org/2000/xmlns/");
urn.Value = "urn:ENRC-IDOC_939_DigiDocs:idm";  
envelope.Attributes.SetNamedItem(urn);
doc.AppendChild(envelope);
XmlNode soapenvheader = doc.CreateElement("soapenv", "Header", doc.DocumentElement.NamespaceURI);
envelope.AppendChild(soapenvheader);
XmlNode body = doc.CreateElement("soapenv", "Body", doc.DocumentElement.NamespaceURI);
envelope.AppendChild(body);  
XmlElement mt_digidocs_fees = doc.CreateElement("mt_digidocs_fees");
mt_digidocs_fees.Prefix = "urn";
body.AppendChild(mt_digidocs_fees);

这就是我得到的

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:urn="urn:ENRC-IDOC_939_DigiDocs:idm" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header />
  <soapenv:Body>
    <mt_digidocs_fees>

所以最后一个元素的名称不包含前缀和命名空间地址的顺序不同

提前致谢

【问题讨论】:

mt_digidocs_fees = doc.CreateElement("mt_digidocs_fees", "urn:ENRC-IDOC_939_DigiDocs:idm"); ? 你为什么不直接使用 SOAP 库来为你做这件事? @Liam 你能再解释一下吗?我刚得到 xml,并被要求以这种格式发送我的数据。似乎我必须阅读一些关于 SOAP 的内容 SOAP(简单对象访问协议)is a standard 尽管它已经很老了。视觉工作室supports this out of the box 或者它曾经,我不确定它是否仍然存在。如前所述,SOAP 现在已经很老了 【参考方案1】:

我喜欢这样使用 Xml Linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1

    class Program
    
        static void Main(string[] args)
        
            string ident = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:ENRC-IDOC_939_DigiDocs:idm\"></soapenv:Envelope>";
            XDocument doc = XDocument.Parse(ident);
            XElement envelope = doc.Root;
            XNamespace nsUrn = envelope.GetNamespaceOfPrefix("urn");
            XNamespace nsSoapenv = envelope.GetNamespaceOfPrefix("soapenv");

            XElement header = new XElement(nsSoapenv + "Header");
            envelope.Add(header);
            XElement body = new XElement(nsSoapenv + "Body");
            envelope.Add(body);
            XElement fees = new XElement(nsUrn + "mt_digidocs_fees");
            body.Add(fees);
        
    

【讨论】:

以上是关于如示例所示创建 xml 标头的主要内容,如果未能解决你的问题,请参考以下文章

如何为使用“create-react-app”创建的 React 应用程序设置标头

如何用Dom4j获取CDATA结点内容

调用rest服务时,soap服务中的请求格式确定失败

如何将标头添加到 PySpark DataFrame?

为啥包含 XML 标头时 C# XmlDocument.LoadXml(string) 会失败?

SpringBoot入门示例