2013-10-24 2 views
1

Я пытаюсь составить запрос SOAP к веб-службе Ebay FindingAPI с помощью C# XmlDocument класс в следующем коде: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

Поскольку ваш документ имеет пространство имен по умолчанию, указанное в самом внешнем элементе, вам необходимо повторить это пространство имен на каждом дочернем элементе, чтобы избежать добавления дополнительного пустого.

Изменение request и param элементы декларации содержат "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

Oh! Я понял. Большое спасибо! : D – Elliott

Смежные вопросы