Herramientas de usuario

Herramientas del sitio


fw:txml

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
fw:txml [2008/05/25 19:54]
alfred
fw:txml [2020/05/09 09:25] (actual)
Línea 33: Línea 33:
  
 ===== Escritura ===== ===== Escritura =====
 +
  
  
Línea 57: Línea 58:
 <?xml version="​1.0"​ ?> <?xml version="​1.0"​ ?>
 <​Hello>​World</​Hello>​ <​Hello>​World</​Hello>​
 +</​code>​
 +Otro ejemplo:
 +<code cpp>
 +TiXmlDocument doc;  ​
 +TiXmlElement* msg;
 +
 +TiXmlDeclaration* decl = new TiXmlDeclaration( "​1.0",​ "",​ ""​ );  ​
 +doc.LinkEndChild( decl );  ​
 + 
 +TiXmlElement * root = new TiXmlElement( "​MyApp"​ );  ​
 +doc.LinkEndChild( root );  ​
 +
 +msg = new TiXmlElement( "​Welcome"​ );  ​
 +msg->​LinkEndChild( new TiXmlText( "​Welcome to MyApp" ));  ​
 +root->​LinkEndChild( msg );  ​
 + 
 +msg = new TiXmlElement( "​Farewell"​ );  ​
 +msg->​LinkEndChild( new TiXmlText( "Thank you for using MyApp" ));  ​
 +root->​LinkEndChild( msg );  ​
 +...
 </​code>​ </​code>​
  
Línea 71: Línea 92:
 ===== Lectura ===== ===== Lectura =====
  
-==== Recorrer un archivo ==== 
  
  
Línea 77: Línea 97:
  
  
 +
 +==== Recorrer un archivo ====
 +Una vez recojas el primer elemento del documento obtendrás como tal un ''​TiXmlNode'',​ a partir de este, como ya sabes, la estructura está montada en forma de árbol. Para acceder a sus nodos hijos sólo tendrás que recoger el primero con ''​FirstChild''​ y recorrer los elementos mediante ''​NextSibling''​ hasta que este método no devuelva NULL. El método ''​Value''​ devolvería el nombre del tag.
 +<code cpp>
 +int countNodes (TiXmlNode* node) {
 + if (node == NULL)
 + return 0;
 + TiXmlNode* child = node->​FirstChild();​
 + int i = 1;
 + while(child != NULL) {
 + i += countNodes(child);​
 + child = child->​NextSibling();​
 + }
 + return i;
 +}
 +
 +int main() {
 + TiXmlDocument doc( "​ex1.xml"​ );
 + if (!doc.LoadFile())
 + cout << "Carga incorrecta.\n";​
 + cout << countNodes(&​doc) << "​\n";​
 + system("​pause"​);​
 + return 0;
 +}
 +</​code>​
 +Para saber el tipo de elemento que es la clase ''​TiXmlNode''​ tiene un método que devuelve un integer comparable a las constantes dentro de esa mismaclase: ''​TiXmlNode::​COMMENT'',​ ''​TiXmlNode::​DECLARATION'',​ ''​TiXmlNode::​DOCUMENT'',​ ''​TiXmlNode::​ELEMENT'',​ ''​TiXmlNode::​TEXT''​ o ''​TiXmlNode::​UNKNOW''​. \\ \\ 
 +De un nodo también podemos saber el atributo padre utilizando el método ''​Parent''​. O sacar el valor en texto mediante ''​ToText''​. \\ \\ 
 +Aún pudiendo recorrerse de forma sencilla, lo mejor es utilizar el ''​[[#​utilizar_el_tixmlhandle|TiXmlHandle]]''​.
  
 ==== Cómo tratar los atributos ==== ==== Cómo tratar los atributos ====
Línea 87: Línea 135:
 } }
 </​code>​ </​code>​
 +=== Recoger el nombre ===
 +Nada, llamas al método ''​Name''​ y ahí lo tienes, en un stringcito tó bonito.
 === Recoger el valor === === Recoger el valor ===
 Recoger un valor como string es muy sencillo, únicamente hemos de llamar al método ''​Value''​ y este lo devuelve sin problema alguno. \\ Recoger un valor como string es muy sencillo, únicamente hemos de llamar al método ''​Value''​ y este lo devuelve sin problema alguno. \\
Línea 95: Línea 145:
 if (pAttrib->​QueryDoubleValue(&​dval)==TIXML_SUCCESS) printf( "valor %1.1f",​ dval); if (pAttrib->​QueryDoubleValue(&​dval)==TIXML_SUCCESS) printf( "valor %1.1f",​ dval);
 </​code>​ </​code>​
 +
  
 ===== Como... ===== ===== Como... =====
  
 +==== Insertar un comentario ====
 +Se crea un objeto ''​TiXmlComment''​ y le añadimos el texto mediante su método ''​SetValue''​.
 +<code cpp>
 +TiXmlComment * comment = new TiXmlComment();​
 +comment->​SetValue("​ Settings for MyApp " );  ​
 +root->​LinkEndChild( comment );  ​
 +</​code>​
 +
 +
 +==== Utilizar el TiXmlHandle ====
 +Es una forma más sencilla de acceder a los elementos permitiendo acceder directamente a sus hijos.
 +<code cpp>
 +TiXmlHandle docHandle( &​document );
 +TiXmlElement* child2 = docHandle.FirstChild("​Document"​).FirstChild("​Element"​).Child("​Child",​ 1).ToElement();​
 +</​code>​
 +<code cpp>
 +int i=0; 
 +while () {
 +  TiXmlElement* child = docHandle.FirstChild( "​Document"​ ).FirstChild( "​Element"​ ).Child( "​Child",​ i ).ToElement();​
 +  if ( !child )
 +    break;
 +  i++;
 +}
 +</​code>​
  
 +==== Enlazar una clase a un archivo .xml ====
 +Evidentemente puedes hacerlo manualmente,​ pero la forma más sencilla es utilizando [[http://​sourceforge.net/​projects/​tinybind|TinyBind]].
fw/txml.1211745266.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)