Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: statham en 30 Enero 2019, 11:37 am



Título: Leer fichero XML desde C++
Publicado por: statham en 30 Enero 2019, 11:37 am
Buenas a todos, recurro a este foro ya que llevo unos dias en los cuales no consigo leer un archivo xml desde un proyecto c++.

He intentado con MSXML pero el me coge bien el archivo **msxmlX.dll** (o quiero pensar eso), tambien he probado con TinyXML y nada.

Con Poco y pugiXML no encuentro mucha documentacion...

Estoy ahora con QtXML, que parece sencillo pero no usa Visual Studio.

Es basicamente leer un fichero xml y guardar variables.

Sabeis de algun videotutorial o web sencilla de seguir??

Un saludo.


Título: Re: Leer fichero XML desde C++
Publicado por: MAFUS en 30 Enero 2019, 17:27 pm
Siempre te puedes hacer tú mismo el algoritmo:
Un XML no es más que un árbol donde cada nodo tiene:
- Datos en formato de texto
- un número indeterminado de otros elementos
- un número indeterminado de propiedades

Haces un parser que lea el XML y sepa cuándo se define una etiqueta, cuando trata con una propiedad, cuando son los datos, que descubra cuando se cierra una etiqueta y lleve un control de si se abren etiquetas y se cierran en el momento adecuado. Al tiempo que te vaya construyendo el árbol con lo que va encontrando.

Sí ha llegado al final del fichero tendrás el árbol creado con todo el XML, si falla destruyes el árbol que llevas hecho eninformas de dónde está el error.


Título: Re: Leer fichero XML desde C++
Publicado por: statham en 31 Enero 2019, 10:41 am
Claro al pincipio leia el fichero y cada vez que detectava una variable global T que era <Test> pues identificaba el primer test, y asi con todas las etiquetas.
Pero queda muy feo, y debo usar una libreria que parsee xml detectando automaticamente la etiquetas, ya que este trabajo tengo q entregarlo y exponerlo

estoy intentandolo con tinyxml2 que es lo mas sencillo que he visto

Para leer algo asi, y guardar cada dato en una variable

<Tests>
   <Test id="test0">
      <Inputs>
         <Input port="A" value="1" />
         <Input port="B" value="4.56" />
         <Input port="C" value="7" />      
      </Inputs>
      <Outputs>
         <Output port="D" value="10" />      
      </Outputs>
   </Test>