Como se usa el SAX y el DOM en xml Quiero ejemplos por favor

juan
01 de Abril del 2004
Necesito saber como se utiliza dom y sax con xml; por favor necesitaría ejemplos sencillos de ambas cosas. Muchas gracias

Davinia
01 de Abril del 2004
Hola,
yo solo se usar DOM.
Para probar, puedes empezar con un pequeño main(), por ejemplo:

int main()
{
IXMLDOMDocument2Ptr pXMLDom;
IXMLDOMElementPtr ElementPtr;
IXMLDOMNodeListPtr pNodeChildren = NULL;
IXMLDOMNodePtr pNode = NULL;
HRESULT hr;

CoInitialize(NULL);

hr = pXMLDom.CreateInstance(__uuidof(DOMDocument40));
if (FAILED(hr))
{
printf("Failed to instantiate DOMDocument40 classn");
return -1;
}
pXMLDom->async = VARIANT_FALSE;

if ( pXMLDom->load("miejemplo.xml") != VARIANT_TRUE)
{
printf("Failed load xml data from file.n%sn", (LPCSTR)pXMLDom->parseError->Getreason());
return -1;
}
ElementPtr = pXMLDom->documentElement;
MessageBox(NULL, (LPCSTR)ElementPtr->xml, "Document from its root", MB_OK); /*para coger comentarios*/
pNodeChildrenSignml = ElementPtr->childNodes;

pXMLDom.Release();

ElementPtr.Release(); /*para coger comentarios*/

pNodeChildrenSignml.Release();
pNodeSign_aux.Release();

CoUninitialize();

return 1;
}

Davinia
01 de Abril del 2004
Hola,
yo solo se usar DOM.
Para probar, puedes empezar con un pequeño main(). Te pongo este ejemplo, para que (si quieres y puedes) lo pruebes en VC++ con MSXML4.0 y veras lo que devuelve cada cosa en el MessageBox. De todas formas, la ayuda del MSXML explica muy bien SAX y DOM. Este ejemplo es usando Smart Pointers, que es mas intuitivo que sin usarlos.
Espero que te ayude

int main()
{
IXMLDOMDocument2Ptr pXMLDom;
IXMLDOMElementPtr ElementPtr;
IXMLDOMNodeListPtr pNodeChildren = NULL;
IXMLDOMNodePtr pNode = NULL;
HRESULT hr;

CoInitialize(NULL);

hr = pXMLDom.CreateInstance(__uuidof(DOMDocument40));
if (FAILED(hr))
{
printf("Failed to instantiate DOMDocument40 classn");
return -1;
}
pXMLDom->async = VARIANT_FALSE;

if ( pXMLDom->load("miejemplo.xml") != VARIANT_TRUE)
{
printf("Failed load xml data from file.n%sn", (LPCSTR)pXMLDom->parseError->Getreason());
return -1;
}
ElementPtr = pXMLDom->documentElement;
MessageBox(NULL, (LPCSTR)ElementPtr->xml, "Document from its root", MB_OK);
pNodeChildren = ElementPtr->childNodes;
for (int i=0; i < pNodeChildren->length; i++)
{
pNode = pNodeChildren->item[i];
MessageBox(NULL, (LPCSTR)pNode ->xml, "Child of pNode", MB_OK);
}
pXMLDom.Release();
ElementPtr.Release();
pNodeChildren.Release();
pNode.Release();

CoUninitialize();

return 1;
}

Davinia
01 de Abril del 2004
Olvidar el primer mail, me colé