【问题标题】:Delphi Webservice: How to extract xml data of TXMLdata?Delphi Webservice:如何提取TXMLdata的xml数据?
【发布时间】:2014-07-11 05:48:56
【问题描述】:

我正在尝试从 web 服务获取数据,一些字符串、整数类型的值是可能的,但 xml 文件中的表被读取为 TXMLdata。如何阅读此内容或保存在 xml 中以供以后在 ClientDataset 中使用?我使用来自 XE5 的 WDSLimporter,这是一个 WDSL 链接:

http://hidroweb.ana.gov.br/fcthservices/mma.asmx?WSDL

【问题讨论】:

  • 在 Delphi 帮助中有“Soap.XSBuiltIns.TXMLData.ObjectToSOAP 返回新生成节点的 XML。”,但我无法填写这些参数。
  • 我还没有尝试过,但帮助还说 TXMLData 类型有一个 XMLNode 属性,该属性“指定 SOAP 消息节点的原始 XML。使用 XMLNode 的内容来获取消息的实际 XML节点”。您可以将其分配给 IXMLNode,然后将 XML 作为 Delphi 类访问。
  • 谢谢,昨天凌晨 4:30 发现了 Delphi 早期版本中没有的 XMLNode。

标签: xml web-services delphi


【解决方案1】:

正如@J__ 建议的那样,您可以使用TXMLDataXMLNode 属性来访问底层XML

试试下面的代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
  showMessage(GetMMASoap.Bacia.XMLNode.XML);
end;

结果:

请考虑到我没有添加必要的条件来避免 AV,以防 GetMMASoap 或其某些嵌套对象不返回数据。您必须自己添加这些。

获得XML 后,您可以根据需要将其转换为TClientDataset 或替代方案。我个人会写一个parser 来做到这一点。

【讨论】:

  • 非常感谢@Guillem Vicens,昨天凌晨 4:30 发现了 Delphi 早期版本中没有的 XMLNode。还有一件事,我可以将例如 GetMMASoap.Bacia.XMLNode.XML 直接放在 ClientDataset.Filename 中还是我需要先保存到 Xml 中?
  • 恐怕你做不到。 TClientDataset 使用自己的模式来保存和加载文件。这意味着它几乎肯定不会(直接)与您的 XML 数据兼容。您必须解析 XML 以将其加载到 TClientDataset。查看TClientDataSet.SaveToFileTClientDataSet.LoadFromFile 帮助主题以获取更多信息。
  • 感谢@GuillemVicens。
猜你喜欢
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
相关资源
最近更新 更多