problemas en C++ creando atributos en Xml

ieio

Lanero Regular
7 Sep 2004
5
Hola,
Estoy haciendo en c++ una serie de funciones para manipular cadenas Xml, Tengo problemas tratando de adicionar un atributo a una cadena Xml, el código del probador es este.

void __fastcall TForma1::Button5Click(TObject *Sender)
{
TCOMIXMLDOMDocument pXMLDatos ; //documento
Msxml_tlb::IXMLDOMElement *pElemento ;
Msxml_tlb::IXMLDOMAttributePtr pAtributo ;
Msxml_tlb::IXMLDOMNamedNodeMapPtr pMapa ;

try
{
pXMLDatos = CoDOMDocument::Create( ) ;
pXMLDatos->async = false ;
pXMLDatos->loadXML( WideString( Cadena->Text ) ) ;
pElemento = pXMLDatos->documentElement ;
pAtributo = pXMLDatos->createAttribute( WideString( Nodo->Text ) ) ;
pMapa = pElemento->attributes ;
pMapa->setNamedItem( pAtributo ) ;
Respuesta->Text = WideString(pMapa->get_item(0)->xml) ;
}
catch( Exception &e )
{
Respuesta->Text = e.Message.c_str() ;
}
}
por lo que se puede ver es un botón con una serie de campos de texto que obtienen la información que quiero meter, el problema es que tengo esto y no se que más hacer
agradezco cualquier ayuda, gracias :confused:
Exitos
 
un ejemplo para obtener atributos en Xml para c++

Por si las moscas tengo uno que obtiene un atributo dado, este si funciona

void __fastcall TForma1::Button4Click(TObject *Sender)
{
TCOMIXMLDOMDocument pXMLDatos ;
Msxml_tlb::IXMLDOMNodePtr pNodo ;
Msxml_tlb::IXMLDOMNodePtr aNodo ;
Msxml_tlb::IXMLDOMNamedNodeMapPtr pMapa ;
TVariant cadena ;
(AnsiString)cadena = "" ;
try
{
//inicializa el documento xml
pXMLDatos = CoDOMDocument::Create( ) ;
pXMLDatos->async = false ;
// introduce la cadena xml como documento
pXMLDatos->loadXML( WideString( Cadena->Text ) ) ;
// asigna el valor pedido al nodo auxiliar
pNodo = pXMLDatos->selectSingleNode( WideString( XmlPath->Text ) ) ;
pMapa = pNodo->attributes ;
if ( pMapa->get_length( ) > 0 )
{
aNodo = pMapa->getNamedItem( WideString( Nodo->Text ) ) ;
aNodo->get_nodeValue( &cadena ) ;
Respuesta->Text = (AnsiString)cadena ;
}
}
catch( Exception &e )
{
Respuesta->Text = e.Message.c_str() ;
}
}