xml (json) 파싱간 사용하는 아이가 있는데요, SuperObject (
https://code.google.com/p/superobject/ ) 입니다.
unit이 달랑 두개 인데, 그중 한넘이 XML 파서입니다.
https://code.google.com/p/superobject/source/browse/superxmlparser.pas
(Un)Marshalling도 지원되고, 어렵지 않게 사용했었습니다. 실제 XML 문서는 꽤나 짧고(1000~1500라인 정도) 단순하여 속도부분에서는 뭐라 드릴말이 없습니다. ㅡㅜ
Johannes Stein분이 demo를 작성, 공개(
https://github.com/Stoney-FD/superobject )해 놓았네요. 참고하시면 될것 같습니다.
김상구.패패루 님이 쓰신 글 :
: TXMLDocument는 MSXML 기반으로 속도가 많이 느립니다.
: DOM을 쓰셔야 한다면 TinyXML같은 가벼운 것을 사용하시고(파스칼용은 뭐가 있는지 잘 모르겠지만) 데이터 양이 많다면 DOM보다는 SAX파서를 쓰시는게 좋을겁니다.
:
: 쿠핑 님이 쓰신 글 :
: : 안녕하세요
: :
: : XML로 디비를 가저와서 뿌려주는데 XML이 웹상에 있다보니 속도 문제가 걸립니다.
: :
: :
: : 가져오는 형태는
: :
: : procedure TfrmMain.XML_Load;
: : var
: : xdRoot: TXMLDocument;
: : xnChild: IXMLNode;
: : xnGrandchild: IXMLNode;
: : I: Integer;
: : j, n: Integer;
: : RedordCount: Integer;
: : begin
: : // XML Document 만들기
: : xdRoot := TXMLDocument.Create(Application);
: :
: : // XML Document 불러오기
: : xdRoot.LoadFromFile(ConnectURL + 'upfile_list.php');
: : xdRoot.Active := True;
: :
: : // 루트 노드가 없을 경우 종료
: : if xdRoot.ChildNodes.First = nil then Begin
: : Exit;
: : End;
: :
: :
: : xnChild := xdRoot.ChildNodes['DataList'];
: : RedordCount := StrToIntDef(xnChild.Attributes['TotalRecord'], 0);
: :
: :
: : if RedordCount = 0 then
: : begin
: : xdRoot.Free;
: : end
: : else begin
: : xnChild := xdRoot.DocumentElement.ChildNodes[0];
: : xnGrandchild := xnChild.ChildNodes[0];
: :
: : lbTextNum.Caption := trim(xnGrandchild.Attributes['num'])
: : end;
: :
: : xdRoot.Free;
: :
: : end;
: :
: : 이런씩으로 가져옵니다.
: :
: : 이때
: : // XML Document 불러오기
: : xdRoot.LoadFromFile(ConnectURL + 'upfile_list.php');
: : xdRoot.Active := True;
: :
: : 이 부분에서 웹을 띄워야 하는 부분이 있어 속도가 느린지 일반적으로 디비를 쿼리하는것보다 상당히 느리더라구요
: :
: : XML로 데이터를 가져올때 속도를 생각해서 가져오는 방법이 없나요???
: :
: : 부디 노하우 답글 좀 부탁드립니다.
: :
: :