336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
이전 포스팅에서 저장한 test.xml을 불러오는 기능은 XMLDOMDocument의 load 메서드입니다.
_variant_t variant = TEXT("test.xml"); xmlDocument->load(variant);
test.xml을 불러와 콘솔에 출력해보겠습니다.
/* ex12.cpp */ #include <windows.h> #include <stdio.h> #include <locale.h> #import <msxml4.dll> int main(int argc, char * argv[]) { ::setlocale(LC_ALL, ""); if (SUCCEEDED(::CoInitialize(NULL))) { { _bstr_t bstr1, bstr2; _variant_t variant; IXMLDOMDocumentPtr xmlDocument; IXMLDOMProcessingInstructionPtr xmlProcessingInstruction; IXMLDOMElementPtr xmlElement1, xmlElement2; IXMLDOMAttributePtr xmlAttribute; VARIANT_BOOL variantBool; if (!SUCCEEDED(xmlDocument.CreateInstance(__uuidof(DOMDocument)))) { ::wprintf(L"xmlDocument가 생성되지 않았습니다.\n"); ::CoUninitialize(); return -1; } /* test.xml을 불러와 XMLDOMDocument에 기억시킵니다. */ variant = TEXT("test.xml"); xmlDocument->load(variant, &variantBool); if (variantBool == VARIANT_TRUE) { xmlDocument->get_xml(bstr1.GetAddress()); ::wprintf(L"%s", (const wchar_t *)bstr1); } } ::CoUninitialize(); } return 0; }
VARIANT_BOOL이라는 자료형이 새로 등장하는데 short 형이 재정의 된 것으로 VARIANT_TRUE, VARIANT_FALSE의 2가지 값을 가집니다. load 메서드에서는 두 번째 매개변수를 통해 파일 열기의 성공 여부를 반환합니다.
루트 엘리먼트에 접근해보겠습니다. 루트 엘리먼트는 문서 엘리먼트(Document Element)라고도 부르며, XMLDOMDocument의 get_documentElement 메서드로 가져올 수 있습니다. 기본 형태는
xmlDocument->get_documentElement(&xmlElement);
이를 통해 integer 어트리뷰트에 어떤 값이 있는지를 출력해보겠습니다.
/* ex13.cpp */ #include <windows.h> #include <stdio.h> #include <locale.h> #import <msxml4.dll> int main(int argc, char * argv[]) { ::setlocale(LC_ALL, ""); if (SUCCEEDED(::CoInitialize(NULL))) { { _bstr_t bstr1, bstr2; _variant_t variant; IXMLDOMDocumentPtr xmlDocument; IXMLDOMProcessingInstructionPtr xmlProcessingInstruction; IXMLDOMElementPtr xmlElement1, xmlElement2; IXMLDOMAttributePtr xmlAttribute; VARIANT_BOOL variantBool; if (!SUCCEEDED(xmlDocument.CreateInstance(__uuidof(DOMDocument)))) { ::wprintf(L"xmlDocument가 생성되지 않았습니다.\n"); ::CoUninitialize(); return -1; } variant = TEXT("test.xml"); xmlDocument->load(variant, &variantBool); /* Document Element를 가져오기 */ xmlDocument->get_documentElement(&xmlElement1); /* integer 속성을 가져오기 */ bstr1 = TEXT("integer"); xmlElement1->getAttributeNode(bstr1, &xmlAttribute); xmlAttribute->get_value(&variant); /* integer 속성의 값과 그 종류를 출력하기 */ ::wprintf(L"type = %d\n", V_VT(&variant.GetVARIANT())); if (V_VT(&variant.GetVARIANT()) == VT_BSTR) { bstr1 = variant; ::wprintf(L"BSTR value = %s\n", (const wchar_t *)bstr1); } else if (V_VT(&variant.GetVARIANT()) == VT_INT) { ::wprintf(L"INT value = %d\n", V_INT(&variant.GetVARIANT())); } } ::CoUninitialize(); } return 0; }
실행 결과 저장 시 정수로 지정했던 1318이 다시 열어보면 BSTR로 저장되어있음을 확인할 수 있습니다. XML 파일이 근본적으로 텍스트 파일이기때문에 어떤 자료형의 VARIANT가 기억되든 모두 문자열로 변환되어 저장됩니다.
'Application Programming Interface > Windows API' 카테고리의 다른 글
Windows DDK 문서 IMEIMES.DOC - 1. Overview (개요) (0) | 2014.09.26 |
---|---|
윈도우 프로그램에서 콘솔창 띄우기 (0) | 2014.09.24 |
Visual C++로 MSXML 사용하기 #6 (0) | 2014.08.19 |
Visual C++로 MSXML 사용하기 #5 (0) | 2014.08.12 |
Visual C++로 MSXML 사용하기 #4 (0) | 2014.08.12 |