【问题标题】:LoadXML Add ParametersLoadXML 添加参数
【发布时间】:2021-03-20 04:28:43
【问题描述】:

我正在做 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 添加到此处的&lt;HesKodu&gt; 字段中。 我想我无法将高引号添加到文件中。

你能告诉我怎么做吗?

【问题讨论】:

  • 最好使用LINQ to XML。它自 2007 年起在 .Net Framework 中可用。
  • 看来您想use string interpolation 将文本框的值放入字符串中。顺便说一句,为 SOAP 构建 xml 并不是您通常想要做的事情。 SOAP 的全部意义在于使用代理构建器,因此您可以将其作为对象进行交互。

标签: c# xml winforms


【解决方案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 Web 服务引用的引用(右键单击项目并添加 => Web 服务引用)。您只需在最后输入带有 ?wsdl 的 url,它就会生成使用 Web 服务所需的一切。

您也可以在网络浏览器中使用该网址。如果您有权访问该服务,您只需在地址栏中输入 url,然后按 Enter。它应该为您提供服务的描述以及如何使用它。

【讨论】:

  • 您好,已编辑,但没有用,我已发送代码行 您可以查看吗?
  • 您是否在我的答案底部查看了我的建议。它会让你的生活更轻松。
【解决方案2】:

当我想添加 TXT 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 soapResult;
            using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
            {
                using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
                {

                    soapResult = rd.ReadToEnd();
                }
                result = soapResult;
                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 = ?

哪一个适合我? 期待您的支持,辛苦了……

【讨论】:

  • 您可以编辑您的问题。您不应添加答案以提供更多信息。
猜你喜欢
  • 1970-01-01
  • 2011-08-03
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 2021-12-28
相关资源
最近更新 更多