2013-10-24 46 views
1

我試圖通過在下面的代碼,使用C#如下類以構成SOAP請求易趣FindingAPI web服務:的XmlDocument的createElement不預先固定的元件下的xmlns

XmlDocument doc = new XmlDocument(); 
XmlElement root = (XmlElement)doc.AppendChild(doc.CreateElement("soap", "Envelope", "http://www.w3.org/2003/05/soap-envelope")); 
root.SetAttribute("xmlns", "http://www.ebay.com/marketplace/search/v1/services"); 
XmlElement header = (XmlElement)root.AppendChild(doc.CreateElement("soap", "Header", "http://www.w3.org/2003/05/soap-envelope")); 
XmlElement body = (XmlElement)root.AppendChild(doc.CreateElement("soap", "Body", "http://www.w3.org/2003/05/soap-envelope")); 
XmlElement request = (XmlElement)body.AppendChild(doc.CreateElement("findItemsByKeywordsRequest")); 
XmlElement param = (XmlElement)request.AppendChild(doc.CreateElement("keywords")); 
param.InnerText = "harry potter phoenix"; 

而且,以上代碼的XML輸出是:

<soap:Envelope xmlns="http://www.ebay.com/marketplace/search/v1/services" xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
    <soap:Header /> 
    <soap:Body> 
     <findItemsByKeywordsRequest xmlns=""> 
      <keywords>harry potter phoenix</keywords> 
     </findItemsByKeywordsRequest> 
    </soap:Body> 
</soap:Envelope> 

然而,這種XML不能由服務器,因爲額外的xmlns =「」在findItemsByKeywordsRequest元素屬性的認可。所需的XML輸出應如下所示:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns="http://www.ebay.com/marketplace/search/v1/services"> 
    <soap:Header/> 
    <soap:Body> 
     <findItemsByKeywordsRequest> 
      <keywords>harry potter phoenix</keywords> 
     </findItemsByKeywordsRequest> 
    </soap:Body> 
</soap:Envelope> 

有人知道我的代碼有什麼問題,請給我一些提示。謝謝!

回答

5

由於您的文檔具有在最外層元素中聲明的默認名稱空間,因此您必須在每個子元素上重複該名稱空間以避免添加額外的空元素。

變化requestparam元素聲明包含"http://www.ebay.com/marketplace/search/v1/services"命名空間

XmlElement request = (XmlElement)body.AppendChild(doc.CreateElement("findItemsByKeywordsRequest", "http://www.ebay.com/marketplace/search/v1/services")); 
XmlElement param = (XmlElement)request.AppendChild(doc.CreateElement("keywords", "http://www.ebay.com/marketplace/search/v1/services")); 

這些變化你的代碼產生以下XML:

<soap:Envelope xmlns="http://www.ebay.com/marketplace/search/v1/services" xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
    <soap:Header /> 
    <soap:Body> 
     <findItemsByKeywordsRequest> 
      <keywords>harry potter phoenix</keywords> 
     </findItemsByKeywordsRequest> 
    </soap:Body> 
</soap:Envelope> 
+0

哦!我知道了。非常感謝你! :d – Elliott