2011-05-24 43 views
2

目前我有這樣的代碼來構建一個SOAP信封:構建SOAP信封,而不是字符串的XDocument

 "<?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文檔,但我不知道如何與去命名空間。

是obiously不起作用代碼:

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))))); 

我怎樣才能完成這個?

在此先感謝。

+0

例如,使用'new XElement(soap +「Body」)' – 2011-05-24 14:50:37

+0

此外,爲什麼您要手動執行此操作而不是使用「添加服務引用」? – 2011-05-24 14:50:55

回答

1

您可以使用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); 
0

這涵蓋了相當不錯的所有的細節:http://msdn.microsoft.com/en-us/library/bb387042.aspx

你無法想象一個DOM API(如L2XML或XmlDocument的)的,你認爲你的字符串串聯代碼的方式。在使用L2XML時,名稱空間聲明和屬性是需要明確處理的「事物」,而不僅僅是尖括號之間的額外字符。因此,XElement構造函數不像「這是我想要在尖括號之間移動的字符串」那樣簡單。相反,您需要使用處理名稱空間的備用XElement構造函數。