Analisando XML Documento Usando DOM em VC + +


eXtensible Markup Language (XML) é o padrão da indústria para a troca de informações. XML permite aos utilizadores definir suas próprias tags. Estas tags são então utilizadas para definir os dados. Por exemplo, <author> Syed Feroz Zainvi </ autor>.
Documento XML tem uma estrutura hierárquica. No topo, há um documento raiz seguido por outros nós, o que pode, por sua vez, têm mais nodos. Pode haver dados e atributos associados a estes nodos.
Os analisadores XML são ferramentas utilizadas para ler ou escrever em um documento XML. Estas são parsers, quer com base em DOM (Document Object Model) ou SAX (Simple API para XML) normas. A comparação entre DOM e SAX enfoques é dado em muitos livros e em sites também.
Neste artigo, você vai aprender a ler e extrair informações de um documento XML em VC + + aplicação. Assume-se que você tem experiência básica de utilizar o Microsoft Visual Studio 6,0 (MSIDE) VC + + para criar aplicativos.
- Baixe o MSXML SDK mais recente a partir http://www.microsoft.com/. Dê um clique duplo no instalador para instalar o SDK baixadas. A instalação irá criar uma pasta começando com o MSXML no seu conjunto como o caminho C: ou em C: \ Arquivos de Programas. Esta pasta vai conter sub-pastas inc e lib, contendo bibliotecas e arquivos cabeçalho necessários para desenvolvimento de aplicativos. Além disso, msxmlX.dll, msxmlXr.dll - onde X é a versão (a última a ser 6) - serão copiados para C: \ Windows \ System32 diretório.
- Crie um novo projeto utilizando MSIDE. Pode ser de qualquer tipo - Aplicação MFC, Win32 Console app, etc
- Próxima criar um ficheiro cabeçalho e um arquivo de origem para colocar o seu código de parsing XML.
- MSXML incluir cabeçalhos e bibliotecas manualmente ou automaticamente. Manualmente isto pode ser feito através da adição caminho de instalação e bibliotecas no âmbito das respectivas guias de diálogo que se abre através do menu Configurações do projeto MSIDE. É melhor fazer isso automaticamente, basta adicionar seguir duas linhas de código em seu cabeçalho arquivo. # Importação <msxml6.dll> named_guids
usando namespace MSXML2; - Também, no seu cabeçalho arquivo colocado seguintes declarações: IXMLDOMDocumentPtr m_plDomDocument;
IXMLDOMElementPtr m_pDocRoot;void DisplayChildren (IXMLDOMNodePtr pParent);
void DisplayChild (IXMLDOMNodePtr pChild);
void DisplayAttributes (IXMLDOMNodePtr pChild, fio-mãe, string & apname);
void InitialiseXMLCOM (CString fomFileName);bool carregados;
- E desde corda está sendo usada, na sequência aditar linhas também para o seu cabeçalho arquivo: # include "string"
usando namespace std; - Após estas definições de projeto, você precisará escrever código para carregar um documento XML. Microsoft COM (Component Object Model) módulo é utilizado. Ainda estou colocando comentários antes de usar COM função, leitores interessados podem consultar documentação COM outro lugar. Carregado = true;
/ / para inicializar COM módulo
:: CoInitialize (NULL);/ / criar uma instância do documento XML
HRESULT hr = m_plDomDocument.CreateInstance (L "Msxml2.DOMDocument.6.0");/ / verificar uma instância criação falhou e exibir o erro antes de abortar
if (FAILED (hr))
(
_com_error er (hr);
AfxMessageBox (er.ErrorMessage ());
EndDialog (1);
)/ / Nome do arquivo xml converter a string COM pode lidar com qualquer coisa (BSTR)
_bstr_t bstrFileName;
bstrFileName = strFileName.AllocSysString ();/ / Chamada a IXMLDOMDocumentPtr função da carga para carregar o documento XML
variant_t vResult;
vResult = m_plDomDocument-> load (bstrFileName);/ / se o embarque se obter êxito, então elemento raiz do documento
se (((bool) vResult) == TRUE) / / sucesso!
(
/ / Agora que o documento é carregado, precisamos de inicializar a raiz ponteiro
m_plDomDocument-m_pDocRoot => documentElement;/ / Após a função recursiva atravessar a árvore XML para crianças, e nós irmão
DisplayChildren (m_pDocRoot);
)
diferente
(
AfxMessageBox ( "Documento Falha ao carregar!");
) - Agora, o seu tempo para atravessar a árvore contidas no documento XML. Seguintes funções fazer isso recursivamente.
void DisplayChildren (IXMLDOMNodePtr pParent)
(
/ / Exibir o nome do nó atual
DisplayChild (pParent);/ / Loop simples para chegar a todas as crianças
for (IXMLDOMNodePtr pChild-pParent => firstChild;
NULO! = PChild;
pChild-pChild => nextSibling)
(
/ / Para cada criança, chama essa função, para que cheguemos
/ / Seus filhos, bem
DisplayChildren (pChild);
)
)void DisplayChild (IXMLDOMNodePtr pChild)
(
IXMLDOMElementPtr pElem1, pElem2;
string CIDS, apname;/ / verificar se o seu filho um nó. Segunda condição mostra como você pode verificar o nome do nó
if (pChild-NODE_ELEMENT ==> NodeType & & (pChild-> nodeName) == _bstr_t ( "Somename"))
(
PChild-HR1 HRESULT => QueryInterface (MSXML2:: IID_IXMLDOMElement, (void **) & pElem1);
if (FAILED (HR1)) (_com_raise_error (HR1);)CIDS = static_cast <string> ((_bstr_t) (pElem1-> getAttribute (_T ( "name "))));
/ / Processo recursivamente todos os seus irmãos e extrair seus atributos
for (IXMLDOMNodePtr pChild1-pChild => firstChild;
NULO! = PChild1;
pChild1-pChild1 => nextSibling)
(
DisplayAttributes (pChild1, CIDS, apname);)
)
)
- Para cada nó, extrair os seus atributos. Seguinte função usa as mesmas chamadas como função acima. Nulos DisplayAttributes (IXMLDOMNodePtr pChild, cid string, string & CIDS)
(
IXMLDOMElementPtr pElem;if (pChild-NODE_ELEMENT ==> NodeType & & (pChild-> nodeName == _bstr_t ( "somename1") | | pChild-> nodeName == _bstr_t ( "atributo")))
(
PChild-HR1 HRESULT => QueryInterface (MSXML2:: IID_IXMLDOMElement, (void **) & pElem);
if (FAILED (HR1)) (_com_raise_error (HR1);)CIDS = static_cast <string> ((_bstr_t) (pElem-> getAttribute (_T ( "name "))));
)
else (/ / algumas condições diferentes como diferentes nó nome
(
)
) - Usuários interessados podem explorar criando DOM dinamicamente, consultando documento XML usando XPath, editar e salvar documentos em XML.

Delicious
Digg
Google
Yahoo