Como detecto si un archivo es del tipo XML?

Post Reply
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Como detecto si un archivo es del tipo XML?

Post 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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

Puedes comprobar si tiene _ al comienzo "<xml"
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

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

Post 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

  
   hFile    := FOpen( aFiles[ 1 ] )
   oXmlDoc  := TXmlDocument():New( hFile )
   oXmlIter := TXmlIterator():New( oXmlDoc:oRoot )

   oTagActual = oXmlIter:NEXT()

   IF ( AllTrim( oTagActual:cName ) != 'xml' )
      ? "error"
...
 
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Post by Antonio Linares »

Que te hace suponer que oTagActual:cName vale 'xml' ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

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

Post 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?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

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

Post 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
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Armando
Posts: 3249
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

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

Post by Armando »

Goosfancito:

No te vale la extensión?

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
acuellar
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

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

Post by acuellar »

Goosfancito:

Intenta asi:

Code: Select all | Expand

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

 
Saludos,

Adhemar C.
User avatar
leandro
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

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

Post by leandro »

Creo que esto te puede servir, es un aporte de nuestro colega Carlos Gallego

https://forums.fivetechsupport.com/view ... 9f#p254367

Code: Select all | Expand

#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)
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

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

Post 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
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

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

Post by karinha »

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Post Reply