البرمجة

إنشاء XML لطلب خدمة ويب SOAP

لإنشاء الـ XML بالشكل الصحيح، يمكنك استخدام كلاس XmlDocument في C#، ولكن يجب أن تقوم بإضافة عناصر الفضاءات الاسمية (namespaces) بشكل صحيح. لكي تحصل على الشكل الصحيح، يمكنك استخدام الكود التالي:

csharp
XmlDocument xmlDoc = new XmlDocument(); XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null); xmlDoc.AppendChild(xmlDeclaration); XmlElement envelopeElement = xmlDoc.CreateElement("soapenv", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/"); XmlElement bodyElement = xmlDoc.CreateElement("soapenv", "Body", "http://schemas.xmlsoap.org/soap/envelope/"); XmlElement buscaEventosElement = xmlDoc.CreateElement("res", "buscaEventos", "http://resource.webservice.correios.com.br/"); XmlElement usuarioElement = xmlDoc.CreateElement("usuario"); usuarioElement.InnerText = "ECT"; buscaEventosElement.AppendChild(usuarioElement); XmlElement senhaElement = xmlDoc.CreateElement("senha"); senhaElement.InnerText = "SRO"; buscaEventosElement.AppendChild(senhaElement); XmlElement tipoElement = xmlDoc.CreateElement("tipo"); tipoElement.InnerText = "L"; buscaEventosElement.AppendChild(tipoElement); XmlElement resultadoElement = xmlDoc.CreateElement("resultado"); resultadoElement.InnerText = "T"; buscaEventosElement.AppendChild(resultadoElement); XmlElement linguaElement = xmlDoc.CreateElement("lingua"); linguaElement.InnerText = "101"; buscaEventosElement.AppendChild(linguaElement); XmlElement objetosElement = xmlDoc.CreateElement("objetos"); objetosElement.InnerText = "JS331400752BR"; buscaEventosElement.AppendChild(objetosElement); bodyElement.AppendChild(buscaEventosElement); envelopeElement.AppendChild(bodyElement); xmlDoc.AppendChild(envelopeElement);

هذا الكود ينشئ XML بنفس الهيكل الذي ذكرته، بدون إضافة عنصر xmlns:res لعنصر res:buscaEventos.

المزيد من المعلومات

طبقًا لما تم ذكره في السؤال، يتعلق الأمر بإنشاء مستند XML بصيغة معينة تستخدم في طلب خدمة ويب SOAP لخدمة البريد البرازيلية Correios. تحتوي الطلبات الخاصة بالخدمة الويب عادةً على هيكل معين يحتوي على معرفات مثل المستخدم وكلمة المرور ونوع البحث ونتيجة البحث ولغة الاستجابة والكود البريدي المراد البحث عنه.

في هذه الحالة، الشكل الصحيح للـ XML يجب أن يتبع الهيكل التالي:

  • يجب أن يحتوي المستند على عنصر Envelope من النوع soapenv:Envelope، حيث يحتوي هذا العنصر عادةً على عناصر رأس (Header) وجسم (Body).
  • عنصر الجسم (Body) يحتوي على عنصر buscaEventos من النوع res:buscaEventos، وهو العنصر الذي يحتوي على تفاصيل الطلب مثل المستخدم وكلمة المرور ونوع البحث ونتيجة البحث ولغة الاستجابة والكود البريدي.
  • يجب أن يكون لعنصر buscaEventos نطاق الفضاء الاسمي (namespace) res.

بالنظر إلى الكود المذكور، يبدو أن المشكلة تكمن في الطريقة التي تم بها إنشاء عنصر buscaEventos. لحل هذه المشكلة، يمكنك إنشاء العنصر باستخدام الـ CreateElement بشكل يدوي، كما هو موضح في الكود الذي تم توضيحه سابقًا.

يمكنك أيضًا استخدام الفئة XmlNamespaceManager لإدارة الفضاءات الاسمية في مستند XML إذا كان هناك حاجة لذلك، ولكن في هذه الحالة، ليس هناك حاجة لاستخدامها.

زر الذهاب إلى الأعلى