JAL的XML解析器

基于SAX的,试了一下,相当好用

procedure TForm1.DomView(Document: IDocument; View: TTreeView);
  procedure ParseXMLNode(DataNode: IElement; TreeNode: TTreeNode);
  var
    I: IIterator;
    N: TTreeNode;
    Child: IElement;
    Attr: TStrings;
    S: string;
  begin
    I := DataNode.Children.Iterator;
    while i.HasNext do
    begin
      if 0 = (I.Next as INode).QueryInterface(IElement, child)  then
      begin
        Attr := XMLAttsToStrings(Child);
        try
          S := Format('%s[%s]', [Child.name, Attr.CommaText]);
          N := View.Items.AddChild(TreeNode, S);
          ParseXMLNode(child, N)
        finally
          Attr.Free;
        end;
      end;
    end;
  end;
begin
  ParseXMLNode(FDocument.root, View.TopItem);
end;

function XMLAttsToStrings(Node: IElement): TStrings;
var
  i :IIterator;
  child: JALMiniDOM.INode;
  text : JALMiniDOM.ITextNode;
  s    : string;
begin
  Result := TStringList.Create;
  try
    i := Node.Attributes.Iterator;
    while i.HasNext do
    begin
      with i.Next as IAttribute do
      begin
          if Value <> '' then
            Result.Values[Name] := Value
          else
            Result.Add(Name + '=');
      end;
    end;

    s := '';
    i := Node.Children.Iterator;
    while i.HasNext do
    begin
      child := i.next as INode;
      if 0 = child.QueryInterface(ITextNode, text)  then
        s := s + text.text;
    end;
    s := TrimRight(s);
    if s <> '' then
       Result.Values['text'] := s;
  except
    FreeAndNil(Result);
    raise;
  end;
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值