loadXML добавляет параметры

#c# #xml #winforms

#c# #xml #winforms

Вопрос:

Я делаю loadXML, но мне нужно добавить поле из формы, но я не смог,

     XmlDocument soapEnvelopeDocument = new XmlDocument();
soapEnvelopeDocument.LoadXml(
    @"<?xml version=""1.0"" encoding=""utf-8""?>
    <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
        <soap:Body>
            <Servis5001>
                <Kodu>abcdefg</Kodu>
                <Sifre>123456789</Sifre>
                <HesKodu>TXBHesKodu.Text</HesKodu>
            </Servis5001>
        </soap:Body>
    </soap:Envelope>");
 
return soapEnvelopeDocument;
 

Мне нужно добавить TXBHESKodu.Text из формы в <HesKodu> поле здесь.
Я думаю, что я не смог добавить верхние кавычки в файл.

Можете ли вы показать мне, как это сделать?

Комментарии:

1. Лучше использовать LINQ для XML . Он доступен в .Net Framework с 2007 года.

2. Похоже, вы хотите использовать интерполяцию строк , чтобы получить значение текстового поля в строку. Кстати, создание xml для SOAP — это не то, что вы обычно хотите делать. Весь смысл SOAP заключается в использовании конструктора прокси, чтобы вы могли взаимодействовать с ним как с объектами.

Ответ №1:

Вот два способа, которыми вы могли бы это сделать. Первый из них самый простой. Просто используйте форматирование строки следующим образом (обратите внимание на знак $ перед знаком @):

 XmlDocument soapEnvelopeDocument = new XmlDocument();
            soapEnvelopeDocument.LoadXml(
                $@"<?xml version=""1.0"" encoding=""utf-8""?>
                    <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
                        <soap:Body>
                            <Servis5001>
                                <Kodu>abcdefg</Kodu>
                                <Sifre>123456789</Sifre>
                                <HesKodu>{TXBHesKodu.Text}</HesKodu>
                            </Servis5001>
                        </soap:Body>
                    </soap:Envelope>");
 

Второй метод использует XML Dom для добавления текста в элемент. Мы находим элемент, используя синтаксис XPath:

 var xmlDocument = GetXmlDocument(@"<?xml version=""1.0"" encoding=""utf-8""?>
                    <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
                        <soap:Body>
                            <Servis5001>
                                <Kodu>abcdefg</Kodu>
                                <Sifre>123456789</Sifre>
                                <HesKodu></HesKodu>
                            </Servis5001>
                        </soap:Body>
                    </soap:Envelope>");

            XmlNode HesKodu = xmlDocument.SelectSingleNode("//Servis5001/HesKodu");

            HesKodu.InnerText = TXBHesKodu.Text;
 

Вам было бы лучше позволить Visual Studio обрабатывать все материалы SOAP за вас. Взгляните на добавление ссылки на ссылку веб-службы SOAP (щелкните правой кнопкой мыши на project и Add => Ссылка на веб-службу). Вы можете просто ввести URL с помощью ?wsdl в конце, и он сгенерирует все, что вам нужно для использования веб-службы.

Вы также можете использовать URL-адрес в веб-браузере. Если у вас есть доступ к сервису, вы можете просто ввести URL-адрес в адресной строке и нажать Enter. Это должно дать вам описание службы и как ее использовать.

Комментарии:

1. Привет, отредактировано, но это не сработало, я отправил строки кода, можете ли вы просмотреть его?

2. Вы взглянули на мою рекомендацию в нижней части моего ответа. Это сделало бы вашу жизнь намного проще.

Ответ №2:

Ошибка использования метода, когда я хочу добавить текстовый файл HesKodu.Text

 private static XmlDocument CreateSoapEnvelope()
        {
            XmlDocument soapEnvelopeDocument = new XmlDocument();
            soapEnvelopeDocument.LoadXml(
                $@"<?xml version=""1.0"" encoding=""utf-8""?>
                    <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
                        <soap:Body>
                            <Servis5001>
                                <Kodu>abcdef</Kodu>
                                <Sifre>abcdef</Sifre>
                                <HesKodu>{TXBHesKodu.Text}</HesKodu>
                            </Servis5001>
                        </soap:Body>
                    </soap:Envelope>");

            return soapEnvelopeDocument;
        }
 

SOAP Все, что я использую в своем блоге, — это весь код, как показано ниже, может быть, если вы хотите его увидеть

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace TOBBHesKoduSorgulama
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void BTNSorgula_Click(object sender, EventArgs e)
        {
            var _url = "https://kpsoda.tobb.org.tr/hesservis.php?wsdl";
            var _action = "https://kpsoda.tobb.org.tr/hesservis.php?op=Servis5001";
            var result = "";
            XmlDocument soapEnvelopeXml = CreateSoapEnvelope();
            HttpWebRequest webRequest = CreateWebRequest(_url, _action);
            InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);

            // begin async call to web request.
            IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);

            // suspend this thread until call is complete. You might want to
            // do something usefull here like update your UI.
            asyncResult.AsyncWaitHandle.WaitOne();

            // get the response from the completed web request.
            string soapResu<
            using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
            {
                using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
                {

                    soapResult = rd.ReadToEnd();
                }
                result = soapResu<
                Console.Write(soapResult);
            }

        }

        private static HttpWebRequest CreateWebRequest(string url, string action)
        {
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
            webRequest.Headers.Add("SOAPAction", action);
            webRequest.ContentType = "text/xml;charset="utf-8"";
            webRequest.Accept = "text/xml";
            webRequest.Method = "POST";
            return webRequest;
        }

        private static XmlDocument CreateSoapEnvelope()
        {
            XmlDocument soapEnvelopeDocument = new XmlDocument();
            soapEnvelopeDocument.LoadXml(
                $@"<?xml version=""1.0"" encoding=""utf-8""?>
                    <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
                        <soap:Body>
                            <Servis5001>
                                <Kodu>abcdef</Kodu>
                                <Sifre>abcdef</Sifre>
                                <HesKodu>{TXBHesKodu.Text}</HesKodu>
                            </Servis5001>
                        </soap:Body>
                    </soap:Envelope>");

            return soapEnvelopeDocument;
        }

        private static void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
        {
            using (Stream stream = webRequest.GetRequestStream())
            {
                soapEnvelopeXml.Save(stream);
            }
        }
    }
}
 

Я также попробовал процесс ссылок на службы, но я не знал, как запросить

 string Kodu = "Kodu";
string Sifre = "Sifre";
string HesKodu = "HesKodu";

TOBBHesKoduSorgulamaServices.Servis5001Request S5001R = new TOBBHesKoduSorgulamaServices.Servis5001Request();
S5001R.Kodu = Kodu;
S5001R.Sifre = Sifre;
S5001R.HesKodu = HesKodu;

TOBBHesKoduSorgulamaServices.Servis5001Response S5001Response = ?
 

Какой из них подходит мне?
Жду вашей поддержки, хорошая работа…

Комментарии:

1. Вы можете отредактировать свой вопрос. Вы не должны добавлять ответ, чтобы предоставить дополнительную информацию.