使用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)))));
我该如何完成?
提前谢谢。
您可以使用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构造器。