본문 바로가기
Delphi, RadStudio

[delphi] 델파이에서 XML DOM사용 (간단한 팁)

by SB리치퍼슨 2010. 9. 16.

XML강좌를 올려달라는 요청이 있어서...
강좌는 아니고 간단한 팁형식으로.. 써보고자 합니다..

XML을 다루는 방법도 여러개가 있지만...
주로 사용하는 DOM(Document Object Model)에 대해서만 간단하게 이야기 할까 합니다.
(사실 다른건 잘 알지 못합니다. ^^;)
우선 XML DOM을 사용하시려면 XML, XPATH에 대해서 약간의 지식이 필요합니다.

먼저 델파이에서 XML DOM을 을 사용하시려면 MSXML_TLB나 MSXML2_TLB를 uses에 추가하셔야 합니다.
(MSXML_TLB는 Import TypeLibrary를 통해 생성할 수 있습니다.)

주로 사용하는 Interface는
IXMLDomDocument?
IXMLDomNodeList
IXMLDomNode
등입니다.
(IXMLDOMElement는 IXMLDomNode에서 상속받은것)

IXMLDomDocument는 버전에 따라서 뒤에 버전번호가 붙기도 합니다.
그래서 전체이름을 쓰지않고 DomDocument로 사용 하는편이 더 좋습니다.

DomDocument에서 자주 쓰이는 메소드나 속성
load : xml 파일을 열어서 Document load
loadXml : xml 문자열값으로 Document load
documentElement : XML Document의 가상의 Root
xml : xml 문자열

IXMLDomNodeList는 IXMLDomNode의 Collection성격의 interface입니다.
item[x]
length

IXMLDomNode에서 자주 쓰이는 메소드나 속성
nodeValue : node의 값 <aaa>123</aaa> 에서 aaa node의 nodeValue는 123
selectSingleNode : 자식node중에서 xpath에 따라 검색하여 대상 node를 반환,IXMLDomNode 형식
selectNodes : 자식node중에서 xpath에 따라 검색하여 대상 node들의 list를 반환,IXMLDomNodeList 형식
childNodes : 자식node들의 list, IXMLDomNodeList 형식
attributes : 속성들의 list


예제>
--------- c:\test.xml --------------------
<?xml version="1.0"?>
<TestList>
 <Test name="abc" description="....">
   가나다
 </Test>
 <Test name="ddd" description="???">
   12345
 </Test>
</TestList>
------------------------------------------

1) 상위 파일을 읽어서 Test node들의 description 속성과 값을 가져온다.
var
 xdom : DomDocument;
 list: IXMLDomNodeList;
 i : integer;
begin
 xdom := CoDomDocument.Create;
 xdom.load('c:\test.xml');
 list := xdom.documentElement.selectNodes('/TestList/Test');
 for i := 0 to list.length - 1 do
   Memo1.Lines.Add('value='+list.item[i].nodeValue + 'Description = ' + list.item[i].attributes.getNamedItem('Description').nodeValue );
end

1) 상위 파일을 읽어서 이름이 'abc'인 Test nod의 description 속성과 값을 가져온다.
var
 xdom : DomDocument;
 node: IXMLDomNode;
 i : integer;
begin
 xdom := CoDomDocument.Create;
 xdom.load('c:\test.xml');
 node := xdom.documentElement.selectSingleNode('/TestList/Test[@name="abc"]');
 Memo1.Lines.Add('value='+node.nodeValue + 'Description = ' + node.attributes.getNamedItem('Description').nodeValue );
end

XPATH 사용하실때 주의점은...
상위 XML예제에서 documentElement가 <TestList>가 아니라 가상의 Node라는 것입니다.
<TestList>는 documentElement의 자식중에서 최상위 node일뿐이죠.

ps : xml dom의 많은 기능에 비하면 제가 쓴 내용은 정말 작은 부분입니다.
형편없는 팁이지만... 조금이라도 도움이 되었으면 합니다.

출처 : Tong - exospace님의 델파이통

반응형

댓글