【问题标题】:Parse SOAP faultstring in Delphi在 Delphi 中解析 SOAP 错误字符串
【发布时间】:2016-12-14 11:00:33
【问题描述】:

我正在尝试像这样在 Delphi xml 中解析:

<?xml version="1.0" encoding="UTF-8"?>
 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <soap:Fault>
      <faultcode>soap:Server</faultcode>
      <faultstring>java.lang.ClassNotFoundException</faultstring>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

德尔福代码:

program TestXML;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Xml.xmldom,
  Xml.XMLIntf,
  Xml.XMLDoc,
  ActiveX;

var
  XMLDoc: TXMLDocument;
  Root,Body,Fault,Node: IXMLNode;

begin
  CoInitialize(nil);
  try
    XMLDoc := TXMLDocument.Create(nil);
    XMLDoc.Options := XmlDoc.Options - [doNodeAutoCreate];
    XMLDoc.LoadFromFile('test.xml');
    Root := XMLDoc.DocumentElement;
    Body := Root.ChildNodes['Body'];
    Writeln(Body.NodeName);
    Fault := Body.ChildNodes['Fault'];
    Writeln(Fault.NodeName);
    try
      Node := Fault.ChildNodes['faultcode'];
      Writeln(Node.Text);
    except
      on E:exception do Writeln(E.Message); // "Node "faultcode not found".
    end;
  finally
    CoUnInitialize;
  end;
end.

我猜问题是:父节点“Fault”有命名空间“http://schemas.xmlsoap.org/soap/envelope/”并且有前缀“soap”但是子节点“faultcode”没有命名空间也没有前缀。

如何获得节点“故障代码”的接口?

谢谢。

【问题讨论】:

  • XMLDoc 应声明为IXMLDocument
  • kobik,我尝试将声明更改为 IXMLDocument,但它会产生相同的错误。
  • 试试Root.ChildNodes.FindNode('faultcode').Text
  • 谢谢,我找到了解决方案,我应该使用 ChildNodes.FindNode('faultcode', '');其中第二个参数中的空字符串表示空命名空间。
  • 请回答

标签: xml delphi soap


【解决方案1】:

这段代码运行良好:

Fault.ChildNodes.FindNode('faultcode', ''); 

第二个参数中的空字符串表示没有命名空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 2011-05-20
    • 2018-12-16
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多