Page 1 of 1

Como detecto si un archivo es del tipo XML?

PostPosted: Thu Nov 09, 2023 12:00 pm
by goosfancito
Hola.
Quiero detectar si el archivo que me está intentando cargar un cliente es un XML, como puedo hacerlo (sin solamente ver si la extension es .xlm)?

gracias.

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Thu Nov 09, 2023 12:02 pm
by Antonio Linares
Puedes comprobar si tiene estos caracteres al comienzo "<xml"

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Thu Nov 09, 2023 12:22 pm
by goosfancito
intento hacer esta comprobación y nunca me lo detecta bien, o sea, nunca me muestra el cartel de ERROR

este es el contenido (modificado al propósito por mi)
<?xmlasd version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"


Code: Select all  Expand view
 
   hFile    := FOpen( aFiles[ 1 ] )
   oXmlDoc  := TXmlDocument():New( hFile )
   oXmlIter := TXmlIterator():New( oXmlDoc:oRoot )

   oTagActual = oXmlIter:NEXT()

   IF ( AllTrim( oTagActual:cName ) != 'xml' )
      ? "error"
...
 

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Thu Nov 09, 2023 12:31 pm
by Antonio Linares
Que te hace suponer que oTagActual:cName vale 'xml' ?

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Thu Nov 09, 2023 7:05 pm
by goosfancito
no entiendo la pregunta, pero cuando hice un fwdbg de ese tag me muestra que es un 'C' y que el valor es 'xml', a eso te referis?

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Thu Nov 09, 2023 7:09 pm
by goosfancito
goosfancito wrote:no entiendo la pregunta, pero cuando hice un fwdbg de ese tag me muestra que es un 'C' y que el valor es 'xml', a eso te referis?


https://i.postimg.cc/pVDKY20W/Captura.png

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Thu Nov 09, 2023 7:20 pm
by Armando
Goosfancito:

No te vale la extensión?

Saludos

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Thu Nov 09, 2023 9:29 pm
by acuellar
Goosfancito:

Intenta asi:
Code: Select all  Expand view

 oFile:= TTxtFile():New( "archivo.xml" )
cLinea:=oFile:ReadLine()
If (At('xml',cLinea)>0
  ?"Es xml"
Else
 ?"No es xml"
Endif
oFile:End()

 

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Thu Nov 09, 2023 9:30 pm
by leandro
Creo que esto te puede servir, es un aporte de nuestro colega Carlos Gallego

https://forums.fivetechsupport.com/viewtopic.php?f=6&t=42322&p=254348&hilit=nodo+especifico&sid=0198c82ce4b6837c5e69d404961f2d2f&sid=d50124788ff4e4ca5d20e1db01d8b09f#p254367

Code: Select all  Expand view

#include "FiveWin.ch"

function Main()
Local oNode
Local cRuta := "xml2.xml"
Local cPath := "xml"
oNode := SearchPathXml( cRuta , cPath )
if valtype(oNode)!="U" 
    msginfo("xml correcto")
else
    msginfo("xml no valido")
endif
return nil

******************************************
*BUSCA LOS DATOS EN NODO EN ESPECIFICO XML
*APORTE EN EL FORO DE FW
******************************************
Function SearchPathXml( cFileName , cPath )
Local oDoc, oNode, aNodes
Local cPath2 := "/" + StrTran( cPath , " -> " , "/" )

aNodes := HB_ATokens(cPath , " -> ")

oDoc := TXmlDocument():New( cFileName )
oNode := oDoc:CurNode
oNode := oDoc:FindFirst( ATAIL(aNodes) )

DO WHILE oNode != NIL
    if HB_ISOBJECT(oNode)
        if oNode:Path() == cPath2
            exit
        endif
    else
        exit
    endif

    oNode := oDoc:FindNext()
ENDDO
Return(oNode)
 

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Fri Nov 10, 2023 5:37 am
by goosfancito
Gracias,
En mi caso la linea que llama a curNode me da error

Compiler version: Harbour 3.2.0dev (r2104281802)
FiveWin version: FWH 21.11
C compiler version: Borland/Embarcadero C++ 7.6 (32-bit)
Windows version: 6.2, Build 9200

Time from start: 0 hours 0 mins 2 secs
Error occurred at: 10/11/2023, 06:24:00
Error description: Error BASE/1004 Message not found: TXMLDOCUMENT:CURNODE
Args:
[ 1] = O TXMLDOCUMENT

Re: Como detecto si un archivo es del tipo XML?

PostPosted: Fri Nov 10, 2023 12:56 pm
by karinha