#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. Вы можете отредактировать свой вопрос. Вы не должны добавлять ответ, чтобы предоставить дополнительную информацию.