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의 많은 기능에 비하면 제가 쓴 내용은 정말 작은 부분입니다.
형편없는 팁이지만... 조금이라도 도움이 되었으면 합니다.
반응형
'Delphi, RadStudio' 카테고리의 다른 글
[개발/delphi] 중복 실행 방지 (0) | 2011.09.01 |
---|---|
[개발/delphi] 절대 죽지 않는 프로그램 만들기 (0) | 2011.08.01 |
[개발/delphi] Vista에서 프로그램 권한상승하기 (0) | 2011.08.01 |
[개발/Delphi] IE 띄우기, IE 실행하기 (0) | 2011.08.01 |
[개발/Delphi] 사용중인 dll 파일의 덮어씌우기 ( 펌 ) (0) | 2010.08.09 |
댓글