首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi 7与XML通信

Delphi 7与XML通信
EN

Stack Overflow用户
提问于 2011-03-12 00:19:18
回答 1查看 1.1K关注 0票数 1

我在Delphi (在pascal工作了30年)有一些(5年的经验),但在WEB编程方面没有那么多经验。我已经在我的一些程序中安装了FTP (文件传输)和SMTP (邮件)支持,并取得了成功。此外,我还使用了HTTP (Get),然后解析了一些字符串,也很成功。但是,就是这样!

现在,我不得不连接到https (安全) url,并使用ASMX服务来发送和接收XML文件。该文件没有问题,已经过测试。

但是..。我几乎不知道如何用Delphi 7实现这种连接。我怀疑SOAP (简单对象访问协议)和这个可疑的-ion是从下面的例子中提出来的,在这里,它在没有可视化类的情况下“凭空”创建对象,但我不确定!

编写的示例是C#中的:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
using System.IO;


namespace SendaStgrXML
{
    public partial class AAmain : Form
    {
        public AAmain()
        {
            InitializeComponent();
        }

        private string FileLoc = null;

        private void AAmain_Load(object sender, EventArgs e)
        {

        }


        private void btnSend_Click(object sender, EventArgs e)
        {
            Stream strm;

            try
            {
                // Test:
                string url = @"https://securep.rsk.is/stadgreidsla/stadgreidslaws/thjonusta.asmx";
                // Life:
                //string url = @"https://secure.rsk.is/stadgreidsla/stadgreidslaws/thjonusta.asmx";

                //proxyStadgreidslaWSE.Stadgreidsla stadgr = new proxyStadgreidslaWSE.Stadgreidsla();
                Stadgr.Stadgreidsla stadgr = new SendaStgrXML.Stadgr.Stadgreidsla();

                OpenFileDialog ofd = new OpenFileDialog();
                ofd.RestoreDirectory = true;

                if (ofd.ShowDialog() != DialogResult.OK)
                {
                    MessageBox.Show("Hætt við");
                    return;
                }

                if ((strm = ofd.OpenFile()) == null)
                {
                    MessageBox.Show("Engin skrá");
                    return;
                }

                Stadgr.Thjonusta thjon = new SendaStgrXML.Stadgr.Thjonusta();
                thjon.Url = url;

                /*  byte[] test = new byte[2000];

                strm.Read(test, 0, 2000);
                MessageBox.Show(ConvertByteArrayToString(test));*/

                XmlSerializer s = new XmlSerializer(typeof(SendaStgrXML.Stadgr.Stadgreidsla),
                    "http://rsk.is/rafraenstadgreidsla/");

                //stadgr = (SendaStgrXML.Stadgr.Stadgreidsla)s.Deserialize(strm);
                strm.Close();

                // This call is for error checking.
                SendaStgrXML.Stadgr.VilluprofaSkilagreinResponseSvarVilluprofun svar = 
                    new SendaStgrXML.Stadgr.VilluprofaSkilagreinResponseSvarVilluprofun();
                svar = thjon.VilluprofaSkilagrein(stadgr);

                // This one is for actual transmission of data:
                SendaStgrXML.Stadgr.SendaSkilagreinResponseSvar svar =
                    new SendaStgrXML.Stadgr.SendaSkilagreinResponseSvar();    
                svar = thjon.SendaSkilagrein(stadgr);

                // Does not apply to you:
                /*SendaStgrXML.Stadgr.SendaSkilagreinLokadArResponseSvar svar =
                    new SendaStgrXML.Stadgr.SendaSkilagreinLokadArResponseSvar();
                svar = thjon.SendaSkilagreinLokadAr(stadgr);*/

                MessageBox.Show(svar.Villubod);

                if (svar.Skilagildi !=-1)
                    MessageBox.Show("Sending tókst");
                else
                    MessageBox.Show("Sending tókst ekki: " +
                                svar.Villubod); 
            }
            catch (Exception er)
            {
                MessageBox.Show(er.ToString());
            }

        }

        public static string ConvertByteArrayToString(byte[] byteArray)
        {
            return (new ASCIIEncoding()).GetString(byteArray);
        }

        private void btnForsendur_Click(object sender, EventArgs e)
        {
            Forsendur fs = new Forsendur();
            fs.Saekja();
        }

        private void btnEldra_Click(object sender, EventArgs e)
        {
            Forsendur fs = new Forsendur();
            fs.Saekja_Eldra();
        }
    }

更新:

我将尝试更详细地描述我的问题,并希望更好。

我用德尔菲写的,德尔菲7和今天一样。我有一个相当简单的任务,就是实现到Web服务的连接。

主要目标是发送XML文件,然后接收一个答案(也是XML文件).

我查看了XML数据绑定向导,发现我没有该向导的架构文件。停在那儿。

我必须声明,我不需要任何帮助来解析或编写XML文件,如果我自己喜欢的话,我可以轻松地构建对象列表。在这种情况下我不需要。(对我来说,XML只是一个包含1.n级块的Ascci文件,我已经构建了一个抽象方法来接收此类文件中“n”值数据的属性)

回到问题..。

我有一个c#代码,但找不到它。例如,我没有看到在运行时构建任何对象的任何类或模式,可能只是缺少了吗?

至少。如果这里有人能帮助我(在这个奇妙的地方,就像Stack溢出一样)如何与这种WEB服务进行通信,那么我将非常感激。我的计划是在15号之前完成,这是冰岛每月交税日的最后一天。

EN

回答 1

Stack Overflow用户

发布于 2011-03-12 03:58:20

语言似乎是C#。您可以使用Delphi的XML数据绑定向导(File->New->Other-> XML )导入XML。

如果这实际上是SOAP,您可能可以使用WSDL导入器(File->New->其他->WebServices->WSDL导入器)为您构建类。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5279807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档