🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.xml
Article #285

����VC++��MSXML����XML�ĵ�(ת��)

#285
From: <Test/>
Date: Fri, 27 Nov 2009 17:12
167 lines
14420 bytes
һ���ĵ�����ģ�ͣ�DOM��
����DOM��Document Object Model���ĵ�����ģ�ͣ��ļ�ƣ��Ƕ�XML�ĵ�����Ӧ�ÿ�������̵�Ӧ�ó���ӿڣ�API������ΪW3C������һ�ֿ�ƽ̨���������޹صĽӿڹ淶��DOM�ṩ���ڲ�ͬ������Ӧ���еı�׼����ӿڣ��������κ�����ʵ�֡�
����DOM���ö���ģ�ͺ�һϵ�еĽӿ�������XML�ĵ������ݺͽṹ�������ö�����ĵ�ģ�ͻ������ֶ���ģ��ʵ�ֵĻ��ܰ�����
������ �����ĵ���ʾ�Ͳ����Ľӿڣ�
������ �ӿڵ����Ժͷ�����
������ �ӿ�֮��Ĺ�ϵ�Լ���������
����DOM�ɶԽṹ����XML�ĵ����н������ĵ��е�ָ�Ԫ�ء�ʵ�塢���Ե��������ݸ��嶼�ö���ģ�ͱ�ʾ������ĵ���������һ���нṹ����Ϣ�������Ǽ򵥵��ı�������ɵĶ���ģ�;������Ľڵ㣬����ͬʱ���˷��������ԡ���ˣ����ĵ������в��������ڶ������ϵĽ��С���DOM�У����е�һ�ж��Ƕ��󣬲����Ǹ�ڵ㻹��ʵ������ԡ�
������DOM����Ҫ�������������
������ XML�ĵ�����
XML�ĵ�����һ�ֶ���ͬʱ�ִ�����XML�ĵ������ɸ�Ԫ�غ���Ԫ����ɡ�
������ XML�ڵ����
XML�ڵ���������XML�ĵ��ڲ��Ľڵ㣬��Ԫ�ء�ע�͡����ֿռ�ȡ�
������ XML�ڵ��б�
XML�ĵ�ģ���б����˽ڵ�ļ��ϡ�
��������DOM��������Ա���Զ�̬�ش���XML�ĵ�������ṹ����ӡ��޸ġ�ɾ�����ݵȡ��������������ԣ�ʹ�����ڴ���XML������ص�����ʱ��ʡ�����ľ�������һ�ַ�ϴ�������˼���ǿ������̹��ߡ�

����DOM���ĸ���ӿ�(�����ԣ�http://bbs.xml.org.cn/dispbbs.asp?boardID=11&ID=9220)
��DOM�ӿڹ淶�У����ĸ���Ľӿڣ�Document��Node��NodeList�Լ�NamedNodeMap�������ĸ���ӿ��У�Document�ӿ��Ƕ��ĵ����в�������ڣ����Ǵ�Node�ӿڼ̳й����ġ�Node�ӿ�����������ӿڵĸ��࣬��Documet��Element��Attribute��Text��Comment�Ƚӿڶ��Ǵ�Node�ӿڼ̳й����ġ�NodeList�ӿ���һ���ڵ�ļ��ϣ������ij���ڵ��е������ӽڵ㡣NamedNodeMap�ӿ�Ҳ��һ���ڵ�ļ��ϣ�ͨ��ýӿڣ����Խ����ڵ���ͽڵ�֮���һһӳ���ϵ���Ӷ����ýڵ������ֱ�ӷ����ض��Ľڵ㡣���潫�����ĸ��ӿڷֱ���һЩ�򵥵Ľ��ܡ� 
1��Document�ӿ� 
Document�ӿڴ�������XML/HTML�ĵ�����ˣ���������ĵ����ĸ��ṩ�˶��ĵ��е���ݽ��з��ʺͲ�������ڡ�
����Ԫ�ء��ı��ڵ㡢ע�͡�����ָ��ȶ����������ĵ��������Ĺ�ϵ��������ڣ�������Document�ӿ��ṩ�˴�������ڵ����ķ�����ͨ��÷��������Ľڵ������һ��ownerDocument���ԣ�����������ǰ�ڵ�����˭�����Լ��ڵ�ͬDocument֮�����ϵ��
��DOM���У�Document�ڵ���DOM���еĸ�ڵ㣬Ҳ����XML�ĵ����в�������ڽڵ㡣ͨ��Docuemt�ڵ㣬���Է��ʵ��ĵ��е�����ڵ㣬�紦��ָ�ע�͡��ĵ������Լ�XML�ĵ��ĸ�Ԫ�ؽڵ�ȵȡ����⣬��һ��DOM���У�Document�ڵ���԰�������ָ����ע����Ϊ���ӽڵ㣬���ĵ����ͽڵ��XML�ĵ���Ԫ�ؽڵ㶼��Ψһ�ġ�

����Document�ӿڵ�IDL��Interface Definition Language�ӿڶ������ԣ����������һЩ�Ƚϳ��õ����Ժͷ�������ϸ���ܿ�����MSDN���ҵ���
2��Node�ӿ� 
Node�ӿ������DOM���о��о������صĵ�λ��DOM�ӿ����кܴ�һ���ֽӿ��Ǵ�Node�ӿڼ̳й����ģ����磬Element��Attr��CDATASection�Ƚӿڣ����Ǵ�Node�̳й����ġ���DOM���У�Node�ӿڴ�������е�һ���ڵ㡣
3��NodeList�ӿ� 
NodeList�ӿ��ṩ�˶Խڵ㼯�ϵij����壬������ʵ������ڵ㼯�Ķ��塣NodeList���ڱ�ʾ��˳���ϵ��һ��ڵ㣬����ij���ڵ���ӽڵ����С����⣬�������һЩ�����ķ���ֵ�У�����GetNodeByName��
��DOM�У�NodeList�Ķ�����"live"�ģ����仰˵�����ĵ��ĸı䣬��ֱ�ӷ�ӳ����ص�NodeList�����С����磬���ͨ��DOM���һ��NodeList���󣬸ö����а���ij��Element�ڵ�������ӽڵ�ļ��ϣ���ô������ͨ��DOM��Element�ڵ���в�������ӡ�ɾ��Ķ��ڵ��е��ӽڵ㣩ʱ����Щ�ı佫���Զ��ط�ӳ��NodeList�����У�����DOMӦ�ó��������������IJ�����
NodeList�е�ÿ��item������ͨ��һ�����������ʣ�������ֵ��0��ʼ�� 
4��NamedNodeMap�ӿ� 
ʵ����NamedNodeMap�ӿڵĶ����а��˿���ͨ�����������ʵ�һ��ڵ�ļ��ϡ�����ע�⣬NamedNodeMap�����Ǵ�NodeList�̳й����ģ������Ľڵ㼯�еĽڵ�������ġ�������Щ�ڵ�Ҳ����ͨ�����������з��ʣ�����ֻ���ṩ��ö��NamedNodeMap�����ڵ��һ�ּ򵥷���������������DOM�淶��ΪNamedNodeMap�еĽڵ�涨��һ������˳��
NamedNodeMap��ʾ����һ��ڵ����Ψһ���ֵ�һһ��Ӧ��ϵ������ӿ���Ҫ�������Խڵ�ı�ʾ�ϡ�
��NodeList��ͬ����DOM�У�NamedNodeMap����Ҳ��"live"�ġ�

��MSXML
����
     ��������˵�����XML�ĸ�ʽ���壬���ǿ����Լ���дһ��XML���﷨����������ʵ����΢���Ѿ��������ṩ��һ��XML�﷨����������һ������MSXML.DLL�Ķ�̬���ӿ⣬ʵ��������һ��COM��Component Object Model������⣬�����װ�˽���XML����ʱ����Ҫ�����ж�����ΪCOM��һ���Զ����Ƹ�ʽ���ֵĺ������޹صĿ����ö���������������κ�����(����VB��VC��DELPHI��C++ Builder�����ǽű����Եȵ�)������е��ã������Ӧ����ʵ�ֶ�XML�ĵ��Ľ�����
����MSXML.DLL���������ҪCOM�ӿ��У�
����1. IXMLDOMDocument(Document�ӿ�)
DOMDocument������XML DOM�Ļ��������������¶�����Ժͷ������������ѯ���޸�XML�ĵ������ݺͽṹ��DOMDocument��ʾ�����Ķ���ڵ㣬��ʵ����DOM�ĵ������еĻ����������ṩ�˶���ij�Ա������֧��XSL��XSLT������һ���ĵ�������������Ķ��󶼿��Դ�����ĵ������еõ��ʹ�����
����2. IXMLDOMNode(Node�ӿ�)
����IXMLDOMNode���ĵ�����ģ��(DOM)�еĻ����Ԫ�ء����ԡ�ע�͡����ָ���������ĵ������������Ϊ��IXMLDOMNode����ʵ�ϣ�DOMDocument������Ҳ��һ��IXMLDOMNode����
����3. IXMLDOMNodeList
����IXMLDOMNodeListʵ������һ���ڵ�(Node)����ļ��ϣ��ڵ�����ӡ�ɾ��ͱ仯�������ڼ��������̷�ӳ����������ͨ��"for.ѭ�� "�ṹ���������еĽڵ㡣
����4. IXMLDOMParseError
����IXMLDOMParseError�ӿ����������ڽ������������ֵ���ϸ����Ϣ����������š��кš��ַ�λ�ú��ı�������
�����ھ���Ӧ��ʱ������DOMDocument��Load������װ��XML�ĵ�����IXMLDOMNode ��selectNodes����ѯ�Ľ���ж�����õ���������������?��selectSingleNode����ѯ�Ľ����һ�������ж��������·����ҵ��ĵ�һ���ڵ㣩�������в�ѯ����createNode��appendChild�����������ڵ��׷�ӽڵ㣬��IXMLDOMElement��setAttribute��getAttribute���������úͻ�ýڵ�����ԡ�

�ġ���̾���

1��Ŀ���ĵ���  

<book id="bk101">
       <author>lizlex</author>
       <title>XML Developer's Guide</title>
    </book>

2�����裺

(1)��StdAfx.h�����붯̬���ӿ� MSXML.DLL(C:\windows\system32\msxml4.dll)
#import <msxml4.dll>

��InitInstance() ������пؼ�ע�ᣬ

if(!AfxOleInit())
   AfxMessageBox("Initial Failure");

(2)������ƣ�
�ֱ�������Text������������ݣ�����ʾ�ĵ������ã�����ӹ����ij�Ա����m_strId,m_strAuthor, m_strTitle�������ȷ����ť��

(3)�����ĵ��ij���Ƭ��
void CXmlparseDlg::OnButtonGenerate() 
{
UpdateData();

MSXML2::IXMLDOMDocumentPtr pDoc; 
MSXML2::IXMLDOMElementPtr   xmlRoot ;

     //����DOMDocument���� 
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); 
if(!SUCCEEDED(hr)) 
{  
   MessageBox("�޷�����DOMDocument���������Ƿ�װ��MS XML Parser ���п�!"); 
   return ;
} 

//��ڵ�����ΪBook
//����Ԫ�ز���ӵ��ĵ���
xmlRoot=pDoc->createElement((_bstr_t)"Book");

//��������
xmlRoot->setAttribute("id",(const char *)m_strId);
pDoc->appendChild(xmlRoot);
MSXML2::IXMLDOMElementPtr pNode;

//��ӡ�author��Ԫ��
pNode=pDoc->createElement((_bstr_t)"Author");
pNode->Puttext((_bstr_t)(const char *)m_strAuthor);
xmlRoot->appendChild(pNode);

//��ӡ�Title��Ԫ��
pNode=pDoc->createElement("Title");
pNode->Puttext((const char *)m_strTitle);
xmlRoot->appendChild(pNode);

//���浽�ļ� 
//�����ھͽ���,���ھ͸��� 
pDoc->save("d:\\he.xml");

}

(4)��ȡXML�ĵ��ij���Ƭ��
void CXmlparseDlg::OnButtonLoad() 
{
MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr;
hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
if(FAILED(hr))
{  
   MessageBox("�޷�����DOMDocument���������Ƿ�װ��MS XML Parser ���п�!"); 
   return ;
} 

//�����ļ� 
pDoc->load("d:\\he.xml"); 

MSXML2::IXMLDOMNodePtr pNode;

//�����в�����ΪBook�Ľڵ�,"//"��ʾ������һ����� 
pNode=pDoc->selectSingleNode("//Book");

MSXML2::DOMNodeType nodeType; 

//�õ��ڵ����� 
     pNode->get_nodeType(&nodeType); 

//�ڵ���� 
CString strName;

strName=(char *)pNode->GetnodeName();

//�ڵ�����,���������� 
MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap=NULL;
MSXML2::IXMLDOMNodePtr    pAttrItem;
_variant_t variantValue;
pNode->get_attributes(&pAttrMap);

long count;
count=pAttrMap->get_length(&count);

pAttrMap->get_item(0,&pAttrItem);
//ȡ�ýڵ��ֵ
pAttrItem->get_nodeTypedValue(&variantValue);
m_strId=(char *)(_bstr_t)variantValue;

UpdateData(FALSE);

}
----------------------------------------
����ת�ԣ� http://hi.baidu.com/invisiable/blog/item/97ec51384e8c232eb9998fc8.html
--
Happy XMLing


�� �޸�:��thinkhy �� Nov 28 01:12:44 2009 �޸ı��ġ�[FROM: 114.249.211.*]
�� ��Դ:��ˮľ���� newsmth.net��[FROM: 114.249.211.*]
Technical Details
Message-ID: <4jBDHG$EyJ@newsmth.net>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!goblin2!goblin1!goblin.stu.neva.ru!feeds.phibee-telecom.net!news.byr.edu.cn!news.newsmth.net!NEWSMTH

Show Full Headers
Complete Article Headers
X-Google-Thread: f7ebf7e2af,e35646f352008e39,start
X-Google-Attributes: gidf7ebf7e2af,public,usenet
X-Google-NewGroupId: yes
X-Google-Language: Chinese,GB
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!goblin2!goblin1!goblin.stu.neva.ru!feeds.phibee-telecom.net!news.byr.edu.cn!news.newsmth.net!NEWSMTH
From: thinkhy@newsmth.net-SPAM.no (<Test/>)
Newsgroups: cn.bbs.comp.xml
Subject: ����VC++��MSXML����XML�ĵ�(ת��)
Date: 27 Nov 2009 17:12:45 GMT
Organization: ˮľ����
Message-ID: <4jBDHG$EyJ@newsmth.net>
Mime-Version: 1.0
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: 8bit
X-Filename: XML/c/M.1259341888.T0