在Delphi 10 Seattle

时间:2016-03-08 15:36:57

标签: xml delphi delphi-10-seattle

我试图理解在我们的应用程序中使用OmniXML,它将用Delphi 10 Seatlle编写。我已经清理了互联网,但我能找到的样本显然使用了另一个版本的Delphi和/或另一个版本的OmniXML,因为他们正在使用的语句不再被接受

 var doc: IXMLDocument;
 doc := CreateXMLDoc;
 doc.selectSingleNode(....);
 doc.SelectNodes(...);

我对使用带名称空间的Selectnodes()特别感兴趣(在MSXML实现中必须设置“SelectionNamespaces”属性)。

有人可以向我提供或指出我在delphi 10 Seattle中使用OmnniXML的实例吗?

1 个答案:

答案 0 :(得分:0)

我用以下代码运行它。仍然让我想知道如何在XPATH搜索中使用命名空间,但我会发布另一个问题。

program Project1;
{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils,
  XML.XMLDom,
  XML.XMLDoc,
  XML.omnixmldom,
  XML.XMLIntf
  ;

const
  cXML = '<?xml version="1.0"?>' +
         '<catalog xmlns:xs12=''http://www.w3.org/2001/XMLSchema-instance''>' +
         '   <xs12:book id="bk101">' +
         '     <xs12:author>Gambardella, Matthew</xs12:author>' +
         '      <xs12:title>XML Developers Guide</xs12:title>' +
         '    <xs12:genre>Computer</xs12:genre>' +
         '    <xs12:price>44.95</xs12:price>' +
         '    <xs12:publish_date>2000-10-01</xs12:publish_date>' +
         '    <xs12:description>An in-depth look at creating applications with  XML.</xs12:description>' +
         '</xs12:book>'
          + '</catalog>'
         ;
var
  doc: IXMLDocument;
  list: IDOMNodeList;
  lSelectNode: IdomNodeSelect;
begin

  DefaultDOMVendor := sOmniXmlVendor;
  try
    try
      doc := LoadXMLData(cXML);

      doc.DocumentElement.DeclareNamespace('a', 'http://www.w3.org/2001/XMLSchema-instance');

      if supports(doc.DOMDocument, IDomNodeSelect, lSelectNode) then
      begin
        list := lSelectNode.selectNodes('a:book');
        Writeln(Format( '%d nodes', [List.length]));
      end;

    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;
  finally
  end;
end.