使用XDocument而不是字符串构建SOAP信封

本文关键字:构建 SOAP 信封 字符串 XDocument 使用 | 更新日期: 2023-09-27 17:57:44

目前我有以下代码来构建一个soap信封:

     "<?xml version='"1.0'" encoding='"utf-8'"?>" +
     "<soap:Envelope " +
      "xmlns:xsi='"http://www.w3.org/2001/XMLSchema-instance'" " +
     "xmlns:xsd='"http://www.w3.org/2001/XMLSchema'" " +
     "xmlns:soap='"http://schemas.xmlsoap.org/soap/envelope/'">" +
     "<soap:Body> " +
     "<ABRSearchByABN xmlns='"http://abr.business.gov.au/ABRXMLSearch/'"> " +
     "<searchString>" + searchValue + "</searchString>" +
     "<includeHistoricalDetails>" + history + "</includeHistoricalDetails>" +
     "<authenticationGuid>" + guid + "</authenticationGuid>" +
     "</ABRSearchByABN>" +
     "</soap:Body>" +
     "</soap:Envelope>";

我正在尝试创建一个XML文档,但我不确定如何使用名称空间。

可怕的不起作用的代码:

XNamespace soap = "http://schemas.xmlsoap.org/soap/envelope/";
XNamespace xmlns = "http://abr.business.gov.au/ABRXMLSearch/";
XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
XNamespace xsd = "http://www.w3.org/2001/XMLSchema";
XDocument xd = new XDocument(
    new XDeclaration("1.0","utf-8",""),
      new XElement("soap:Envelope xmlns:xsi='"http://www.w3.org/2001/XMLSchema-instance'" xmlns:xsd='"http://www.w3.org/2001/XMLSchema'" xmlns:soap='"http://schemas.xmlsoap.org/soap/envelope/'"",   
          new XElement("soap:Body",
              new XElement("ABRSearchByABN xmlns='"http://abr.business.gov.au/ABRXMLSearch/'"",
                  new XElement("searchString", searchValue),
                  new XElement("includeHistoricalDetails", history),
                  new XElement("authenticationGuid", guid)))));

我该如何完成?

提前谢谢。

使用XDocument而不是字符串构建SOAP信封

您可以使用XmlDocument类并继续追加子级。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.AppendChild(xmlDoc.CreateNode(XmlNodeType.Element, "soap", "Envelope", "http://www.w3.org/2001/XMLSchema-instance"));

此外,假设您已经将xml存储为字符串,一个更简单但可能不太易于管理的解决方案是简单地声明一个新的XmlDocument并将字符串加载到其中。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(yourString);  

这非常详细地涵盖了所有内容:http://msdn.microsoft.com/en-us/library/bb387042.aspx

您不能像考虑字符串连接代码那样考虑DOM API(如L2XML或XmlDocument)。在使用L2XML时,命名空间声明和属性是需要显式处理的"东西",而不仅仅是尖括号之间的额外字符。因此,XElement构造函数并不像"这是我想放在尖括号之间的字符串"那么简单。相反,你需要使用一个处理命名空间的替代XElement构造器。