Apertura y validación de un archivo XML -- ++ campo con validation campo con file campo con error-handling campo con xml camp codereview Relacionados El problema

Opening and validating an XML file


0
vote

problema

Español

Tengo una sección de código que repite muchas líneas y estoy buscando refactore este código posiblemente para que se pueda usar una función en lugar de las mismas líneas de código cada vez. A continuación se muestra la sección del código y el código de repetición se produce en cada instrucción IF

  A4  

¿Cómo voy a hacer este limpiador?

Original en ingles

I have a section of code that repeats many lines and I am looking to refactor this code possibly so that a function can be used instead of the same lines of code each time. Below is the section of code and the repeating code occurs in each if statement

Traversal::Traversal(string source, bool isFileName)  {       using namespace XML_Parser;       using std::endl;        std::ostringstream ppd;   if (isFileName)   {       string content, line;       std::ifstream file(source);       if (! file)       {           ppd << endl << "error opening file " << source;           cRep = ppd.str();           cSuc = false;           return;       }       ppd << endl << " file " << source << " opened ";       while (file.good())       {           getline(file, line);           content += '\n';           content += line;       }       ppd << endl << "file " << source << " read ";       source = content;   }   if (! elementExists(source,"afcd"))   {       ppd << endl << "no afcd tag";       cRep = ppd.str();       cSuc = false;       return;   }   if (! elementExists(source,"rteirl"))   {       ppd << endl << "no rteirl tag";       cRep = ppd.str();       cSuc = false;       return;   } 

How would I go about making this cleaner?

              

Lista de respuestas

1
 
vote

El objetivo básico es colocar partes repetidas en la función, mientras se pasa como un parámetro cualquier cosa que sea diferente:

  if (elementMissing(source, "afcd")) {     return; }  if (elementMissing(source, "rteirl")) {     return; }  bool elementMissing(source, element) {     if (! elementExists(source, element)) {         ppd << endl << "no " << element << " tag";         cRep = ppd.str();         cSuc = false;         return true;     } else {         return false;     } }   

No estoy seguro de qué crep y CSUC deben estar haciendo, así que no puedo ayudarlo con esa parte.

 

The basic aim is to put repeating parts in the function, while passing as a parameter anything that's different:

if (elementMissing(source, "afcd")) {     return; }  if (elementMissing(source, "rteirl")) {     return; }  bool elementMissing(source, element) {     if (! elementExists(source, element)) {         ppd << endl << "no " << element << " tag";         cRep = ppd.str();         cSuc = false;         return true;     } else {         return false;     } } 

I'm not sure what cRep and cSuc are supposed to be doing, so I can't help you with that part.

 
 
0
 
vote

Use una función de ayuda, algo a lo largo de la línea de:

  bool Helper(std::string tagtype) {   if (! elementExists(source, tagtype))   {       ppd << endl << "no " << tagtype << " tag";       cRep = ppd.str();       cSuc = false;       return true;   }   return false; }   

Obviamente, debe averiguar cómo pasar (por referencia) los valores de ppd , 9988776655544332 , etc.

 

Use a helper function, something along the line of:

bool Helper(std::string tagtype) {   if (! elementExists(source, tagtype))   {       ppd << endl << "no " << tagtype << " tag";       cRep = ppd.str();       cSuc = false;       return true;   }   return false; } 

obviously you need to figure out how to pass in (by reference) the values of ppd, cRep, etc.

 
 
0
 
vote

¿Qué tal:

  void Traversal::BadStatus( std::ostringstream& ppd, const string& msg ) {   ppd << endl << msg;   cRep = ppd.str();   cSuc = false; }   

entonces:

  if( ! elementExists(source, "asdf") ) {     BadStatus("no asdf tag");     return; }   

Por lo general, sin embargo, la mejor solución a un error en el tiempo de construcción es para lanzar una excepción.

 

How about:

void Traversal::BadStatus( std::ostringstream& ppd, const string& msg ) {   ppd << endl << msg;   cRep = ppd.str();   cSuc = false; } 

Then:

if( ! elementExists(source, "asdf") ) {     BadStatus("no asdf tag");     return; } 

Usually, though, the best solution to an error at construction time is to throw an exception.

 
 

Relacionados problema

7  Construir menú de MS Word XML  ( Build menu from ms word xml ) 
Recientemente he reunido un poco de jQuery que le permite a un usuario desarrollar una lista de viñetas en MS Word con los hipervínculos y enciende eso en una...

3  Leyendo un archivo XML grande y analizando los elementos necesarios en MySQLDB  ( Reading a large xml file and parsing necessary elements into mysqldb ) 
Tengo concepto justo en una programación (aprendiz), pero no un código experto para refactorarse al más alto nivel. Estoy tratando de leer un archivo XML enor...

8  Python CSV a XML Converter  ( Python csv to xml converter ) 
Estoy creando una aplicación que se lee en los datos de un archivo CSV y crea un archivo XML usando LXML. El siguiente código funciona como se esperaba. Sin e...

2  Diferente enfoque a la siguiente acción ASP.NET WEB API  ( Different approach to the following asp net web api action ) 
Tal vez alguien aquí puede ayudarme a resolver esta implementación y hacerlo mejor. Primero las siguientes restricciones: 1 controlador & amp; Acción que...

2  Análisis de XML con doble etiquetas anidadas usando MINDOM  ( Parsing xml with double nested tags using mindom ) 
Quiero recuperar la identificación y el nombre por habilidad. Funciona pero esta bien hecho? Me gustaría quedarme con minidom, pero todos los consejos serán a...

0  XQUERY Compara orden de dos secuencias  ( Xquery compare order of two sequences ) 
He escrito una función en Xquery 3.0 (usando Basex) que prueba una secuencia de base contra una secuencia de prueba, con el objetivo de determinar si los elem...

2  XML a Windows.Forms.Keys Listar  ( Xml to windows forms keys list ) 
Me tomó mucho pinchando y las pruebas de unidad para que el código se vea como si fuera ahora. Así que tengo un archivo XML que en parte se ve así value: {...

5  Sistema de control de stock  ( Stock control system ) 
He programado este sistema de control de stock simple utilizando Javafx para GUI y PostgreSQL para una base de datos. Por favor, vaya a través de mi código ...

7  Implementación de la configuración XML  ( Xml settings implementation ) 
Estoy tratando de averiguar cómo hacer esto más dinámicamente. En este momento, guardo cada campo de forma individual / manualmente. Me encantaría, tal vez te...

3  Buscar cambio en XML e IMPRIMIR NODE  ( Find change in xml and print node ) 
Este código se ha desarrollado con ayuda en el desbordamiento de la pila. Está diseñado para comparar dos archivos XML e imprimir el nodo para cualquier difer...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos