-1

我在 Delphi XE 中创建了一个 WebService 以连接到我的 ERP 数据库并返回纯 XML。我制作了使用我的网络服务的客户端。完美无缺,与 1000 个用户完美合作。

从另一家企业,他们在 .NET 中制作了相同的 Web 服务,并按照我的规范返回相同的纯 XML,我的客户端应用程序完美地使用了这两个 Web 服务,就像它是一样的。

他们制作了另一个客户端,并在他们的 web 服务中放置了其他功能,即返回 .NET 数据集。

现在我必须实现相同的函数并以相同的 .NET 样式返回数据集。

我怎样才能做到这一点?如何以 XML .NET 样式转换我的数据集?

TIA。

4

2 回答 2

1

我不是在回答您的直接问题,而是提供更好的解决方案的替代方案。

原因是虽然返回一个plain 不是一个好主意,但它是System.Data.DataSet一种显示概念证明的实用方式。

作为副业:

我从来没有找到一个TClientDataSet转换System.Data.DataSet器或其他方式。如果有人找到,请发表评论。

通过 Web 服务解析数据的“正确”方法是定义XML您希望从 Web 服务返回到客户端的结构(例如,通过为其定义一个),然后使用 XSD/XML 映射从您的 DelphiXSD返回该结构XML网络服务。

为了实现这一点,Delphi 有一个XML Mapper 工具,可以TClientDataSet来回XML映射。这篇文章- 虽然很老 - 仍然是如何做到这一点的一个很好的例子。涵盖这方面的另一个重要信息来源是这一系列书籍章节

在 .NET 端,您希望将 XML 映射到System.Data.DataSet. 一篇不错的文章在这里

于 2013-08-20T19:20:38.230 回答
0

显示的 xml 是 .net 中其他 web 服务的响应

<?xml version="1.0" encoding="utf-8"?>
  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
      <NotMyWS_Header xmlns="http://NotMyWebService.ServiceName/ServiceName/ServiceName.asmx">
        <Version />
    ...
        <mensageStatus>201 - Login KO.</mensageStatus>
      </NotMyWS_Header>
    </soap:Header>
    <soap:Body>
      <ArticleBrandResponse xmlns="http://NotMyWebService.ServiceName/ServiceName/ServiceName.asmx">
        <ArticleBrandResult>
          <xs:schema id="ArticleBrand" 
                     targetNamespace="http://NotMyWebService.ServiceName/ArticleBrand.xsd" 
                     xmlns:mstns="http://NotMyWebService.ServiceName/ArticleBrand.xsd" 
                     xmlns="http://NotMyWebService.ServiceName/ArticleBrand.xsd" 
                     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
                     xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" 
                     attributeFormDefault="qualified" 
                     elementFormDefault="qualified">
            <xs:element name="ArticleBrand" 
                msdata:IsDataSet="true" 
                msdata:UseCurrentLocale="true">
              <xs:complexType>
                <xs:choice minOccurs="0" 
                           maxOccurs="unbounded">
                  <xs:element name="Brand">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="bra_id" 
                                    type="xs:string" 
                                    default="" 
                                    minOccurs="0" />
                        <xs:element name="bra_as_id" 
                                    type="xs:string" 
                                    default="" 
                                    minOccurs="0" />
                        <xs:element name="bra_name" 
                                    type="xs:string" 
                                    default="" 
                                    minOccurs="0" />
                        <xs:element name="bra_as_name" 
                                    type="xs:string" 
                                    default="" 
                                    minOccurs="0" />
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:choice>
              </xs:complexType>
            </xs:element>
          </xs:schema>
          <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" 
                           xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" />
        </ArticleBrandResult>
      </ArticleBrandResponse>
    </soap:Body>
  </soap:Envelope>

我需要从我的 Delphi Webservice 生成它。我的问题是关于 Delphi 中是否有任何自动方式(组件或类似的东西)直接从数据集生成主体。

现在我正在寻找从定义的 xsd 生成 XML,因为告诉我 Jeroen Wiert Pluimwers。(再次感谢)

于 2013-08-21T13:40:53.863 回答