![]() |
OpenAlbum 1.0.b
|
Parsea ficheros XML. Más...
#include <parser.h>
Métodos públicos | |
Parser (const std::string &path, QWidget *parent_) | |
ticpp::Element * | root () |
std::string | get_content (const ticpp::Element *element) const |
std::string | get_attribute (const std::string &name, const ticpp::Element *element) const |
template<typename T > | |
bool | get_attribute (const std::string &name, const ticpp::Element *element, T *value) const |
ticpp::Element * | find (const std::string &name, ticpp::Element *element=0) |
bool | find (const std::string &name, std::vector< ticpp::Element * > &v, ticpp::Element *element=0) |
bool | add_element (const std::string &name, ticpp::Element *father=0) |
template<typename T > | |
bool | set_attribute (const std::string &name, const T &value, ticpp::Element *element) |
template<typename T > | |
bool | set_content (const T &value, ticpp::Element *element) |
bool | save_document (const char *path) |
Parsea ficheros XML.
Clase que se utiliza para parsear ficheros XML. Tratamos de que todos los datos del álbum esten separados del código. De esta manera se consigue que los hipotéticos diseñadores puedan cambiar parámetros de las plantillas sin saber programar ni recompilar el código.
Se utilizará generalmente para leer aunque también se puede escribir en ficheros XML con esta clase (Guardar álbum, por ejemplo, podría usar esta característica).
Ejemplo de uso:
Si tenemos un fichero xml con esta estructura:
<portada x="500" y="200" fondo="background_invierno" id="invierno"> <areas_texto> <area_texto x="100" y="50" pos_x="20" pos_y="94" orientacion="vertical" /> <area_texto x="20" y="328" pos_x="115" pos_y="16" orientacion="horizontal"/> </areas_texto> <areas_imagen> <area_imagen x="15" y="20" pos_x="10" pos_y="20" /> </areas_imagen> </portada>
Podemos parsearlo de la siguiente forma:
Parser parser("portada.xml"); ticpp::Element* element = parser.root(); int tamx, tamy, areax, areay, areaposx, areaposy; string fondo, id, orientacion; cout << endl << "PRUEBA DEL PARSER" << endl; cout << "=================" << endl << endl; // Atributos parser.get_attribute("x", element, &tamx); parser.get_attribute("y", element, &tamy); id = parser.get_attribute("id", element); fondo = parser.get_attribute("fondo", element); cout << "Atributos:" << endl; cout << "x = " << tamx << endl; cout << "y = " << tamy << endl; cout << "id = " << id << endl; cout << "fondo = " << fondo << endl << endl; // Areas de texto vector<ticpp::Element*> areas; parser.find("area_texto", areas, parser.find("areas_texto")); for(vector<ticpp::Element*>::iterator i = areas.begin(); i != areas.end(); i++){ parser.get_attribute("x", *i, &areax); parser.get_attribute("y", *i, &areay); parser.get_attribute("pos_x", *i, &areaposx); parser.get_attribute("pos_y", *i, &areaposy); orientacion=parser.get_attribute("orientacion", *i); } ...
Parser::Parser | ( | const std::string & | path, |
QWidget * | parent_ | ||
) |
Constructor
Carga el fichero xml indicado por la ruta
path | Ruta del fichero xml a cargar |
Definición en la línea 8 del archivo parser.cpp.
bool Parser::add_element | ( | const std::string & | name, |
ticpp::Element * | father = 0 |
||
) |
Añade el elemento dado como hijo de otro también indicado.
name | Nombre del elemento a añadir |
father | Padre del elemento a añadir. Si se omite se toma por defecto el elemennto raíz. |
Definición en la línea 110 del archivo parser.cpp.
ticpp::Element * Parser::find | ( | const std::string & | name, |
ticpp::Element * | element = 0 |
||
) |
Busca y devuelve el primer elemento a partir de un padre con el nombre dado
name | Nombre del elemento a buscar |
element | Elemento padre desde el que se realizará la búsqueda. Si se omite, se tomará la raíz, es decir, se buscará desde el principio del documento XML. |
Definición en la línea 62 del archivo parser.cpp.
bool Parser::find | ( | const std::string & | name, |
std::vector< ticpp::Element * > & | v, | ||
ticpp::Element * | element = 0 |
||
) |
Busca e inserta en el vector dado los elementos que coincidan con el nombre indicado
name | Nombre de los elementos a buscar |
v | Vector de elementos donde se gardarán los resultados coincidentes |
element | Elemento padre a partir del cual se realiza la búsqueda. Si se omite se tomará la raíz. Es decir, se buscará desde el principio del documento XML. |
Definición en la línea 93 del archivo parser.cpp.
std::string Parser::get_attribute | ( | const std::string & | name, |
const ticpp::Element * | element | ||
) | const |
Consultor
Obtiene el atributo en forma de cadena del nombre indicado del elemento dado
name | Nombre del atributo cuyo valor se quiere consultar |
element | Elemento del que se quiere saber su atributo |
Definición en la línea 37 del archivo parser.cpp.
bool Parser::get_attribute | ( | const std::string & | name, |
const ticpp::Element * | element, | ||
T * | value | ||
) | const [inline] |
Consultor
Obtiene el atributo en forma del tipo deseado del nombre indicado del elemento dado
name | Nombre del atributo cuyo valor se quiere consultar |
element | Elemento del que se quiere consultar el atributo |
value | Variable en la que se quiere guardar el valor del atributo |
std::string Parser::get_content | ( | const ticpp::Element * | element | ) | const |
Consultor
Accede al contenido de texto de un elemento del fichero xml
element | Elemento del que se quiere consultar su contenido |
Definición en la línea 27 del archivo parser.cpp.
ticpp::Element * Parser::root | ( | ) |
Consultor
Devuelve el elemento raíz del xml.
Definición en la línea 22 del archivo parser.cpp.
bool Parser::save_document | ( | const char * | path | ) |
Guarda el documento con las modificaciones realizadas
path | ruta del fichero a guardar |
Definición en la línea 123 del archivo parser.cpp.
bool Parser::set_attribute | ( | const std::string & | name, |
const T & | value, | ||
ticpp::Element * | element | ||
) | [inline] |
bool Parser::set_content | ( | const T & | value, |
ticpp::Element * | element | ||
) | [inline] |