Leer datos especifico de un XML
Re:
[quote="thefull"][quote="MarioDava"]Ok Rafael, te comento, tambien estoy usando xHarbour 00.99.70, pero me puedes indicar el nombre de la librerái donde se encuentran estas clases.
Saludos,
[quote="thefull"][quote="MarioDava"]Thefull, de hecho si vi tus articulos, e hice las pruebas pero no me funciono, primero no supe cual era la libreria o si era un prg con la clase, que include se necesitaba, etc.
De hecho tampoco me funciono la clase XMLRead, así que me ire con las sugerencia de Miguel.
Pero agradezco la atención.
Saludos,
[/quote]
Pues la libreria TIP creo que es la que contiene el tema de internet, XML, etc.
De todas maneras, tienes que poner el #include "hbxml.ch"m, ademas
de compilar con la libreria pcrepos, soporte de expresiones regulares,
pero no estoy seguro de ello, puesto que pueden que hayan cambiado
alguna parte de xHarbour que no se comporte como deberia...
Me parece una burrada el codigo que habeis puesto, pues es inmantenible a la larga, solamente sirve para salir del paso , pero no para abordar el problema.
La solucion mucho más potente , en todos los sentidos, es usar las clases
de Giancarlo, que realizó para xHarbour, ahora estan tambien pasandolas a Harbour.
Te voy a poner un ejemplo practico, para que puedes ver realmente como funciona;
Ejemplo:
[code]#include "fileio.ch"
#include "hbxml.ch"
PROCEDURE Main( cFileName )
hFile := FOpen( cFileName )
If hFile = -1
Error_Msg( cFileName, "No se pudo abrir el fichero" + cFileName )
return
endif
oXmlDoc := TXmlDocument():New( hFile )
if oXmlDoc:nStatus != HBXML_STATUS_OK
cError := "Error While Processing File: " + AllTrim( Str( oxmlDoc:nLine ) ) + " # "+;
"Error: " + HB_XmlErrorDesc( oxmlDoc:nError ) + " # " +;
"Tag Error on tag: " + oxmlDoc:oErrorNode:cName + " # " +;
"Tag Begin on line: " + AllTrim( Str( oxmlDoc:oErrorNode:nBeginLine ) )
Error_Msg( cFileName, cError )
QUIT
endif
if( oNodo := oXmlDoc:FindFirst( "PETICION", "id", "CONSULTA_EMPRESA" ) ) != NIL )
Consulta_Empresa( oNodo, cFileName )
endif
fClose( hFile )
RETURN
*******************************************************************************
*******************************************************************************
STATIC FUNCTION Consulta_Empresa( oNodo, cFile )
Local oIter, oNodeChild , oNode, oIterDia, oNodeDia, oNodeDet
Local oNodeHab
Local nCodigo , cNombre
Local oDoc, oRes, oNode_Empresa, oUnidad, oDbf
Local cPath, cFileName
If !open( "AGENCIAS" )
Error_Msg( cFile, "NO SE PUDO ABRIR AGENCIAS", "CONSULTA_EMPRESA" )
Return NIL
Endif
DATABASE oDbf
oDbf:SetBuffer( .F. )
// Buscando codigo
oIter := TXMLIteratorScan():New( oNodo )
oNode := oIter:Find( "PARAM", "id", "codigo" )
nCodigo := oNode:GetAttribute("valor")
oNode := oNode:oNext // El siguiente en el nodo es el nombre
//cNombre := oNode:GetAttribute("valor")
cNombre := oNode:oChild:cData // Para VALORES CDATA
oDoc := TXmlDocument():New() // Creacion del documento respuesta....
oDoc:oRoot:AddBelow( TxmlNode():New( HBXML_TYPE_PI,'xml' , , 'version="1.0" encoding="iso-8859-1"' ) )
oRes := TxmlNode():New( HBXML_TYPE_TAG, "RESPUESTA" )
oRes:SetAttribute( "id", "CONSULTA_EMPRESA" )
oRes:SetAttribute( "res", "OK" )
oDoc:oRoot:AddBelow( oRes )
oNode_Empresa := TxmlNode():New( HBXML_TYPE_TAG, "LEMPRESAS" )
IF !Empty( nCodigo ) // Pasamos codigo, buscamos por codigo
nCodigo = VAL( nCodigo )
IF DbSeek( nCodigo )
oUnidad := SAVEAGE2XML( oDbf )
oNode_Empresa:AddBelow( oUnidad )
ENDIF
ELSE // El codigo esta vacio, buscamos por nombre
IF !Empty( cNombre )
oDbf:SetOrder( 2 )
IF DbSeek( cNombre )
While !oDbf:Eof()
IF cNombre = Substr( oDbf:Ag_Nom, 1, Len( cNombre ) )
oUnidad := SAVEAGE2XML( oDbf )
oNode_Empresa:AddBelow( oUnidad )
ELSE
EXIT
ENDIF
oDbf:Skip()
SysRefresh()
end while
ENDIF
ENDIF
ENDIF
oDbf:Close()
*oDoc:oRoot:AddBelow( oNode_Empresa )
oRes:AddBelow( oNode_Empresa )
cPath := cFilePath( cFile )
if cPath == ""
cPath := ""
endif
cFileName := Name_File( cFile )
hFile := FCreate( cPath + cFileName + ".RES" )
If hFile != -1
oDoc:Write( hFile, HBXML_STYLE_INDENT + HBXML_STYLE_THREESPACES )
FClose( hFile )
Endif
SysRefresh()
RETURN NIL
*******************************************************************************
*******************************************************************************
STATIC FUNCTION SAVEAGE2XML( oDbf )
Local oNodo, oNombre, oDirec, oCData, oPobla, oPais, oProv, oCodigo
oNodo := TxmlNode():New( HBXML_TYPE_TAG, "EMPRESA" )
oCodigo := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oCodigo:SetAttribute( "id", "codigo" )
oCodigo:SetAttribute( "valor", alltrim( str( oDbf:Ag_Codi ) ) )
oNodo:AddBelow( oCodigo )
// Metemos Codigo.
*oNodo:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, "codigo", , alltrim( str( oDbf:Ag_Codi ) ) ) )
// Nombre
oNombre := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oNombre:SetAttribute( "id", "nombre" )
// Atencion.. si activamos esta linea, crearia <nombre>[[CDATA]]</nombre>
// oNombre := TxmlNode():New( HBXML_TYPE_TAG, "nombre" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_Nom ) )
oNombre:AddBelow( oCData )
oNodo:AddBelow( oNombre )
// Direccion
oDirec := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oDirec:SetAttribute( "id", "direccion" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_direcci ) )
oDirec:AddBelow( oCData )
oNodo:AddBelow( oDirec )
// Poblacion
oPobla := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oPobla:SetAttribute( "id", "poblacion" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_poblaci ) )
oPobla:AddBelow( oCData )
oNodo:AddBelow( oPobla )
// Provincia
oProv := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oProv:SetAttribute( "id","provincia" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_PoblaC2 ) )
oProv:AddBelow( oCData )
oNodo:AddBelow( oProv )
// Pais
oPais := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oPais:SetAttribute( "id","pais" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_Pais ) )
oPais:AddBelow( oCData )
oNodo:AddBelow( oPais )
RETURN oNodo
[/code]
Para entenderlo , te pongo la definicion del XML, con su explicacion, para
que puedas hacerte una idea.
******************************************************************************
PETICION DE CONSULTA PARA EMPRESAS
******************************************************************************
"codigo"
Si el valor de codigo es diferente que vacio, devolverá en la respuesta
solamente la empresa/agencia de ese codigo.
"nombre"
Si se da nombre, y el valor de codigo esta vacio, devolverá una lista
conteniendo los registros que cumplan solamente el contenido inicial del
nombre, es decir, si el valor es "EL CORTE", se seleccionaran TODOS los que
empiezan por "EL CORTE".
<?xml version="1.0" encoding="iso-8859-1"?>
<PETICION id="CONSULTA_EMPRESA">
<LPARAMS>
<PARAM id="codigo" valor="xxx"/>
<PARAM id="nombre"> <![CDATA[A & B]]> </PARAM>
</LPARAMS>
******************************************************************************
RESPUESTA PARA CONSULTA DE EMPRESA
******************************************************************************
El fichero generado sera igual al que hemos pasado , pero con la extension
.RES. El fichero resultante se creará donde este el fichero pasado.
El contenido de [[CDATA]] se establece para que el parseador de XML no tenga
en cuenta el contenido.
<?xml version="1.0" encoding="iso-8859-1"?>
<RESPUESTA id="CONSULTA_EMPRESA" res="OK">
<LEMPRESAS>
<EMPRESA>
<PARAM id="codigo" valor=""/>
<PARAM id="nombre"> <![CDATA[]]> </PARAM>
<PARAM id="direccion"> <![CDATA[]]> </PARAM>
<PARAM id="poblacion"> <![CDATA[]]> </PARAM>
<PARAM id="provincia"> <![CDATA[]]> </PARAM>
<PARAM id="pais"> <![CDATA[]]> </PARAM>
</EMPRESA>
</LEMPRESAS>
</RESPUESTA>
res="OK" retorna siempre que se a realizado con exito.
De lo contrario, devuelve res="ERROR" y descripcion="Texto del error",
por ejemplo:
<?xml version="1.0" encoding="iso-8859-1"?>
<RESPUESTA id="CONSULTA_EMPRESA" res="ERROR" descripcion="No se puede...">
Es decir, el ejemplo que te he puesto, es capaz de leer un XML de entrada
para ocasionarte una XML de salida, 2x1 ;-)
Sinceramente, esto que te he puesto es MUCHISIMO más potente de usar.
Cualquier duda, por aqui.[/quote]
Rafael,
Primero, agradezco los elemento que me has proporcionado y, segundo efectivamente, se que al meterse a trabajar con XMLs el requerimiento que tengo va ir crecendio eso es natural en cualquier proceso (pero de momento esto me resolvio el problema, ademas solo cargo la cadena una sola vez y de ahi uso las funciones de texto para buscar mis datos, que en este momento son basicos).
Lo que si te puedo decir es que la clase XMLRead esta fallando en el metodo oXML:GetValue(), ya que incluso con el mismo ejemplo de la clase no encuentra el elemento indicado, los demas metodos de esta clase si me han funcionado, pero al parecer hay que pagar para eliminar un msg que aparece.
Voy hacer las pruebas y te comento como me fue.
Gracias nuevamente.
Saludos,
[quote="thefull"][quote="MarioDava"]Thefull, de hecho si vi tus articulos, e hice las pruebas pero no me funciono, primero no supe cual era la libreria o si era un prg con la clase, que include se necesitaba, etc.
De hecho tampoco me funciono la clase XMLRead, así que me ire con las sugerencia de Miguel.
Pero agradezco la atención.
Saludos,
[/quote]
Pues la libreria TIP creo que es la que contiene el tema de internet, XML, etc.
De todas maneras, tienes que poner el #include "hbxml.ch"m, ademas
de compilar con la libreria pcrepos, soporte de expresiones regulares,
pero no estoy seguro de ello, puesto que pueden que hayan cambiado
alguna parte de xHarbour que no se comporte como deberia...
Me parece una burrada el codigo que habeis puesto, pues es inmantenible a la larga, solamente sirve para salir del paso , pero no para abordar el problema.
La solucion mucho más potente , en todos los sentidos, es usar las clases
de Giancarlo, que realizó para xHarbour, ahora estan tambien pasandolas a Harbour.
Te voy a poner un ejemplo practico, para que puedes ver realmente como funciona;
Ejemplo:
[code]#include "fileio.ch"
#include "hbxml.ch"
PROCEDURE Main( cFileName )
hFile := FOpen( cFileName )
If hFile = -1
Error_Msg( cFileName, "No se pudo abrir el fichero" + cFileName )
return
endif
oXmlDoc := TXmlDocument():New( hFile )
if oXmlDoc:nStatus != HBXML_STATUS_OK
cError := "Error While Processing File: " + AllTrim( Str( oxmlDoc:nLine ) ) + " # "+;
"Error: " + HB_XmlErrorDesc( oxmlDoc:nError ) + " # " +;
"Tag Error on tag: " + oxmlDoc:oErrorNode:cName + " # " +;
"Tag Begin on line: " + AllTrim( Str( oxmlDoc:oErrorNode:nBeginLine ) )
Error_Msg( cFileName, cError )
QUIT
endif
if( oNodo := oXmlDoc:FindFirst( "PETICION", "id", "CONSULTA_EMPRESA" ) ) != NIL )
Consulta_Empresa( oNodo, cFileName )
endif
fClose( hFile )
RETURN
*******************************************************************************
*******************************************************************************
STATIC FUNCTION Consulta_Empresa( oNodo, cFile )
Local oIter, oNodeChild , oNode, oIterDia, oNodeDia, oNodeDet
Local oNodeHab
Local nCodigo , cNombre
Local oDoc, oRes, oNode_Empresa, oUnidad, oDbf
Local cPath, cFileName
If !open( "AGENCIAS" )
Error_Msg( cFile, "NO SE PUDO ABRIR AGENCIAS", "CONSULTA_EMPRESA" )
Return NIL
Endif
DATABASE oDbf
oDbf:SetBuffer( .F. )
// Buscando codigo
oIter := TXMLIteratorScan():New( oNodo )
oNode := oIter:Find( "PARAM", "id", "codigo" )
nCodigo := oNode:GetAttribute("valor")
oNode := oNode:oNext // El siguiente en el nodo es el nombre
//cNombre := oNode:GetAttribute("valor")
cNombre := oNode:oChild:cData // Para VALORES CDATA
oDoc := TXmlDocument():New() // Creacion del documento respuesta....
oDoc:oRoot:AddBelow( TxmlNode():New( HBXML_TYPE_PI,'xml' , , 'version="1.0" encoding="iso-8859-1"' ) )
oRes := TxmlNode():New( HBXML_TYPE_TAG, "RESPUESTA" )
oRes:SetAttribute( "id", "CONSULTA_EMPRESA" )
oRes:SetAttribute( "res", "OK" )
oDoc:oRoot:AddBelow( oRes )
oNode_Empresa := TxmlNode():New( HBXML_TYPE_TAG, "LEMPRESAS" )
IF !Empty( nCodigo ) // Pasamos codigo, buscamos por codigo
nCodigo = VAL( nCodigo )
IF DbSeek( nCodigo )
oUnidad := SAVEAGE2XML( oDbf )
oNode_Empresa:AddBelow( oUnidad )
ENDIF
ELSE // El codigo esta vacio, buscamos por nombre
IF !Empty( cNombre )
oDbf:SetOrder( 2 )
IF DbSeek( cNombre )
While !oDbf:Eof()
IF cNombre = Substr( oDbf:Ag_Nom, 1, Len( cNombre ) )
oUnidad := SAVEAGE2XML( oDbf )
oNode_Empresa:AddBelow( oUnidad )
ELSE
EXIT
ENDIF
oDbf:Skip()
SysRefresh()
end while
ENDIF
ENDIF
ENDIF
oDbf:Close()
*oDoc:oRoot:AddBelow( oNode_Empresa )
oRes:AddBelow( oNode_Empresa )
cPath := cFilePath( cFile )
if cPath == ""
cPath := ""
endif
cFileName := Name_File( cFile )
hFile := FCreate( cPath + cFileName + ".RES" )
If hFile != -1
oDoc:Write( hFile, HBXML_STYLE_INDENT + HBXML_STYLE_THREESPACES )
FClose( hFile )
Endif
SysRefresh()
RETURN NIL
*******************************************************************************
*******************************************************************************
STATIC FUNCTION SAVEAGE2XML( oDbf )
Local oNodo, oNombre, oDirec, oCData, oPobla, oPais, oProv, oCodigo
oNodo := TxmlNode():New( HBXML_TYPE_TAG, "EMPRESA" )
oCodigo := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oCodigo:SetAttribute( "id", "codigo" )
oCodigo:SetAttribute( "valor", alltrim( str( oDbf:Ag_Codi ) ) )
oNodo:AddBelow( oCodigo )
// Metemos Codigo.
*oNodo:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, "codigo", , alltrim( str( oDbf:Ag_Codi ) ) ) )
// Nombre
oNombre := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oNombre:SetAttribute( "id", "nombre" )
// Atencion.. si activamos esta linea, crearia <nombre>[[CDATA]]</nombre>
// oNombre := TxmlNode():New( HBXML_TYPE_TAG, "nombre" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_Nom ) )
oNombre:AddBelow( oCData )
oNodo:AddBelow( oNombre )
// Direccion
oDirec := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oDirec:SetAttribute( "id", "direccion" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_direcci ) )
oDirec:AddBelow( oCData )
oNodo:AddBelow( oDirec )
// Poblacion
oPobla := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oPobla:SetAttribute( "id", "poblacion" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_poblaci ) )
oPobla:AddBelow( oCData )
oNodo:AddBelow( oPobla )
// Provincia
oProv := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oProv:SetAttribute( "id","provincia" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_PoblaC2 ) )
oProv:AddBelow( oCData )
oNodo:AddBelow( oProv )
// Pais
oPais := TxmlNode():New( HBXML_TYPE_TAG, "PARAM" )
oPais:SetAttribute( "id","pais" )
oCData := TxmlNode():New( HBXML_TYPE_CDATA )
oCData:cData := OemToAnsi( Alltrim( oDbf:Ag_Pais ) )
oPais:AddBelow( oCData )
oNodo:AddBelow( oPais )
RETURN oNodo
[/code]
Para entenderlo , te pongo la definicion del XML, con su explicacion, para
que puedas hacerte una idea.
******************************************************************************
PETICION DE CONSULTA PARA EMPRESAS
******************************************************************************
"codigo"
Si el valor de codigo es diferente que vacio, devolverá en la respuesta
solamente la empresa/agencia de ese codigo.
"nombre"
Si se da nombre, y el valor de codigo esta vacio, devolverá una lista
conteniendo los registros que cumplan solamente el contenido inicial del
nombre, es decir, si el valor es "EL CORTE", se seleccionaran TODOS los que
empiezan por "EL CORTE".
<?xml version="1.0" encoding="iso-8859-1"?>
<PETICION id="CONSULTA_EMPRESA">
<LPARAMS>
<PARAM id="codigo" valor="xxx"/>
<PARAM id="nombre"> <![CDATA[A & B]]> </PARAM>
</LPARAMS>
******************************************************************************
RESPUESTA PARA CONSULTA DE EMPRESA
******************************************************************************
El fichero generado sera igual al que hemos pasado , pero con la extension
.RES. El fichero resultante se creará donde este el fichero pasado.
El contenido de [[CDATA]] se establece para que el parseador de XML no tenga
en cuenta el contenido.
<?xml version="1.0" encoding="iso-8859-1"?>
<RESPUESTA id="CONSULTA_EMPRESA" res="OK">
<LEMPRESAS>
<EMPRESA>
<PARAM id="codigo" valor=""/>
<PARAM id="nombre"> <![CDATA[]]> </PARAM>
<PARAM id="direccion"> <![CDATA[]]> </PARAM>
<PARAM id="poblacion"> <![CDATA[]]> </PARAM>
<PARAM id="provincia"> <![CDATA[]]> </PARAM>
<PARAM id="pais"> <![CDATA[]]> </PARAM>
</EMPRESA>
</LEMPRESAS>
</RESPUESTA>
res="OK" retorna siempre que se a realizado con exito.
De lo contrario, devuelve res="ERROR" y descripcion="Texto del error",
por ejemplo:
<?xml version="1.0" encoding="iso-8859-1"?>
<RESPUESTA id="CONSULTA_EMPRESA" res="ERROR" descripcion="No se puede...">
Es decir, el ejemplo que te he puesto, es capaz de leer un XML de entrada
para ocasionarte una XML de salida, 2x1 ;-)
Sinceramente, esto que te he puesto es MUCHISIMO más potente de usar.
Cualquier duda, por aqui.[/quote]
Rafael,
Primero, agradezco los elemento que me has proporcionado y, segundo efectivamente, se que al meterse a trabajar con XMLs el requerimiento que tengo va ir crecendio eso es natural en cualquier proceso (pero de momento esto me resolvio el problema, ademas solo cargo la cadena una sola vez y de ahi uso las funciones de texto para buscar mis datos, que en este momento son basicos).
Lo que si te puedo decir es que la clase XMLRead esta fallando en el metodo oXML:GetValue(), ya que incluso con el mismo ejemplo de la clase no encuentra el elemento indicado, los demas metodos de esta clase si me han funcionado, pero al parecer hay que pagar para eliminar un msg que aparece.
Voy hacer las pruebas y te comento como me fue.
Gracias nuevamente.
-
- Posts: 257
- Joined: Wed May 16, 2007 9:40 pm
- Location: Iquique Chile
Re: Leer datos especifico de un XML
Hola Rafa
Una consulta estoy, enviando un xml a un webservice, este me responde de buena manera, pero la respuesta es un archivo adjunto, como puedo leer o capturar ese adjunto que viene con la respuesta... te dejo la respuesta del webservice
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<cl:token xmlns:cl="cl.zofri.sve">4327b70a4411182b4--27e0df65-a4-2-60cb-3899 b521-3181-c:547389c8a67:fce22-337b72a1401481b7-22-e-dc60-2452e6-ca-08093b82 -81118c8597:84c3a478f2e:2</cl:token>
<cl:respuesta xmlns:cl="cl.zofri.sve">
<java:resCodigo xmlns:java="java:cl.zofri.sve.utl.bo">0</java:resCodigo>
<java:resMensaje xmlns:java="java:cl.zofri.sve.utl.bo">Se ejecutó correctamente el servicio.</java:resMensaje>
<java:resSeveridad xmlns:java="java:cl.zofri.sve.utl.bo">O</java:resSeveridad>
</cl:respuesta>
</env:Header>
<env:Body>
<m:exportarBorradoresResponse xmlns:m="http://cl/zofri/sve/prd/wsn">
<m:return>
<Include href="cid:return=d63bc3c4-682f-4d1c-9a2f-15c536a59db1@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
</m:return>
</m:exportarBorradoresResponse>
</env:Body>
</env:Envelope>
Una consulta estoy, enviando un xml a un webservice, este me responde de buena manera, pero la respuesta es un archivo adjunto, como puedo leer o capturar ese adjunto que viene con la respuesta... te dejo la respuesta del webservice
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<cl:token xmlns:cl="cl.zofri.sve">4327b70a4411182b4--27e0df65-a4-2-60cb-3899 b521-3181-c:547389c8a67:fce22-337b72a1401481b7-22-e-dc60-2452e6-ca-08093b82 -81118c8597:84c3a478f2e:2</cl:token>
<cl:respuesta xmlns:cl="cl.zofri.sve">
<java:resCodigo xmlns:java="java:cl.zofri.sve.utl.bo">0</java:resCodigo>
<java:resMensaje xmlns:java="java:cl.zofri.sve.utl.bo">Se ejecutó correctamente el servicio.</java:resMensaje>
<java:resSeveridad xmlns:java="java:cl.zofri.sve.utl.bo">O</java:resSeveridad>
</cl:respuesta>
</env:Header>
<env:Body>
<m:exportarBorradoresResponse xmlns:m="http://cl/zofri/sve/prd/wsn">
<m:return>
<Include href="cid:return=d63bc3c4-682f-4d1c-9a2f-15c536a59db1@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
</m:return>
</m:exportarBorradoresResponse>
</env:Body>
</env:Envelope>
Fivewin 11.07
-
- Posts: 257
- Joined: Wed May 16, 2007 9:40 pm
- Location: Iquique Chile
Re: Leer datos especifico de un XML
Alguien sabe como extraer, o leer un archivo que viene como adjunto dentro de un xml
Fivewin 11.07
- José Vicente Beltrán
- Posts: 279
- Joined: Mon Oct 10, 2005 8:55 am
- Location: Algeciras, España
- Contact:
Re: Leer datos especifico de un XML
Hola elmoiquique,
Si el archivo adjunto esta codificado dentro del XML prueba a usar la funcion
fMimeDec( <cIn>, <cOut> )
donde:
<cIn> Un archivo que contiene el texto codificado
<cOut> El archivo resultante desencriptado (p.e. mipdf.pdf).
saludos
Si el archivo adjunto esta codificado dentro del XML prueba a usar la funcion
fMimeDec( <cIn>, <cOut> )
donde:
<cIn> Un archivo que contiene el texto codificado
<cOut> El archivo resultante desencriptado (p.e. mipdf.pdf).
saludos
-
- Posts: 257
- Joined: Wed May 16, 2007 9:40 pm
- Location: Iquique Chile
Re: Leer datos especifico de un XML
Hola Jose
Gracias por contestar, perdona mi ignorancia
Este es el XMl de respuesta en donde el tag <Include ref es donde creop que trae le archivo codificado .
ARCHIVO OUT.XML
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header xmlns:work="http://bea.com/2004/06/soap/workarea/">
<cl:token xmlns:cl="cl.zofri.sve">0e2099080517762c4--3bc04e97-f4-c-1303-0a88 a2d1-7f43-7:6434ab958b9:a6545-e40b9280507561c6-23-c-4090-147cc1-04-3ab80acd -3f13274673:af948495a95:5</cl:token>
<cl:respuesta xmlns:cl="cl.zofri.sve">
<java:resCodigo xmlns:java="java:cl.zofri.sve.utl.bo">0</java:resCodigo>
<java:resMensaje xmlns:java="java:cl.zofri.sve.utl.bo">Se ejecuto correctamente el servicio.</java:resMensaje>
<java:resSeveridad xmlns:java="java:cl.zofri.sve.utl.bo">O</java:resSeveridad>
</cl:respuesta>
<work:WorkContext xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
<java class="java.beans.XMLDecoder">
<string>weblogic.app.sveProcDocEAR</string>
<int>214</int>
<string>weblogic.workarea.StringWorkContext</string>
<string>r43.3</string>
<string>weblogic.app.KNAEar</string>
<int>214</int>
<string>weblogic.workarea.StringWorkContext</string>
<string>r43.2</string>
<string/>
</java>
</work:WorkContext>
</env:Header>
<env:Body>
<m:exportarBorradoresResponse xmlns:m="http://cl/zofri/sve/prd/wsn">
<m:return>
<Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
</m:return>
</m:exportarBorradoresResponse>
</env:Body>
</env:Envelope>
Tu Me dices, seria algo asi o estoy equivocado
fMimeDec( <cIn>, <cOut> )
donde:
<cIn> out.xml
//Un archivo que contiene el texto codificado
<cOut> El archivo resultante desencriptado (p.e. mipdf.pdf).
Gracias por contestar, perdona mi ignorancia
Este es el XMl de respuesta en donde el tag <Include ref es donde creop que trae le archivo codificado .
ARCHIVO OUT.XML
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header xmlns:work="http://bea.com/2004/06/soap/workarea/">
<cl:token xmlns:cl="cl.zofri.sve">0e2099080517762c4--3bc04e97-f4-c-1303-0a88 a2d1-7f43-7:6434ab958b9:a6545-e40b9280507561c6-23-c-4090-147cc1-04-3ab80acd -3f13274673:af948495a95:5</cl:token>
<cl:respuesta xmlns:cl="cl.zofri.sve">
<java:resCodigo xmlns:java="java:cl.zofri.sve.utl.bo">0</java:resCodigo>
<java:resMensaje xmlns:java="java:cl.zofri.sve.utl.bo">Se ejecuto correctamente el servicio.</java:resMensaje>
<java:resSeveridad xmlns:java="java:cl.zofri.sve.utl.bo">O</java:resSeveridad>
</cl:respuesta>
<work:WorkContext xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
<java class="java.beans.XMLDecoder">
<string>weblogic.app.sveProcDocEAR</string>
<int>214</int>
<string>weblogic.workarea.StringWorkContext</string>
<string>r43.3</string>
<string>weblogic.app.KNAEar</string>
<int>214</int>
<string>weblogic.workarea.StringWorkContext</string>
<string>r43.2</string>
<string/>
</java>
</work:WorkContext>
</env:Header>
<env:Body>
<m:exportarBorradoresResponse xmlns:m="http://cl/zofri/sve/prd/wsn">
<m:return>
<Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
</m:return>
</m:exportarBorradoresResponse>
</env:Body>
</env:Envelope>
Tu Me dices, seria algo asi o estoy equivocado
fMimeDec( <cIn>, <cOut> )
donde:
<cIn> out.xml
//Un archivo que contiene el texto codificado
<cOut> El archivo resultante desencriptado (p.e. mipdf.pdf).
Fivewin 11.07
- José Vicente Beltrán
- Posts: 279
- Joined: Mon Oct 10, 2005 8:55 am
- Location: Algeciras, España
- Contact:
Re: Leer datos especifico de un XML
En caso de que el archivo adjunto esté incrustado en el XML, debes extraer primero el bloque de texto leyendo el XML,
luego creas un archivo de texto cuyo contenido sea el bloque que acabas de estraer (p.e. "Origen.txt" y con
fMimeDec("origen.txt", "Salida.pdf")
lo tratas para obtener el archivo original.
si por el contrario, en el XML solo se alude a la dirección web donde está situado el archivo adjunto, el tema consiste en recuperarlo desde esa dirección.
ojalá te haya podido ayudar.
saludos
luego creas un archivo de texto cuyo contenido sea el bloque que acabas de estraer (p.e. "Origen.txt" y con
fMimeDec("origen.txt", "Salida.pdf")
lo tratas para obtener el archivo original.
si por el contrario, en el XML solo se alude a la dirección web donde está situado el archivo adjunto, el tema consiste en recuperarlo desde esa dirección.
ojalá te haya podido ayudar.
saludos
-
- Posts: 257
- Joined: Wed May 16, 2007 9:40 pm
- Location: Iquique Chile
Re: Leer datos especifico de un XML
Hola Jose
Gracias por tu ayuda y por darte el tiempo de explicarme el tema ya que como ves soy un poco nuevo en este tema de xml y me han aparecido cosas nuevas, pero con respecto a tu comentario, la primera opcion no creo que sea, porque el documento en si no viene codificado dentro de este, mas bien por lo que mis conocimientos me dicen es que es una direccion web, solo a mi modo pensar, dentro de un pedazo del xml, viene esto lo que creo que es una direccion, pero no se como interpretarla, no se si tu has hecho este proceso, en el que me puedas ayudar..
Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
<env:Body>
<m:exportarBorradoresResponse xmlns:m="http://cl/zofri/sve/prd/wsn">
<m:return>
<Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
</m:return>
</m:exportarBorradoresResponse>
</env:Body>
Gracias por tu ayuda y por darte el tiempo de explicarme el tema ya que como ves soy un poco nuevo en este tema de xml y me han aparecido cosas nuevas, pero con respecto a tu comentario, la primera opcion no creo que sea, porque el documento en si no viene codificado dentro de este, mas bien por lo que mis conocimientos me dicen es que es una direccion web, solo a mi modo pensar, dentro de un pedazo del xml, viene esto lo que creo que es una direccion, pero no se como interpretarla, no se si tu has hecho este proceso, en el que me puedas ayudar..
Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
<env:Body>
<m:exportarBorradoresResponse xmlns:m="http://cl/zofri/sve/prd/wsn">
<m:return>
<Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
</m:return>
</m:exportarBorradoresResponse>
</env:Body>
Fivewin 11.07
- José Vicente Beltrán
- Posts: 279
- Joined: Mon Oct 10, 2005 8:55 am
- Location: Algeciras, España
- Contact:
Re: Leer datos especifico de un XML
Es posible que alguien con mas experiencia que yo en el tema, me contradiga, pero las direcciones del ejemplo no parece que contengan documento alguno, de hecho si pruebas a conectarte a las direcciones ves que indican formatos etc.
Quizás haya que ojear la documentación correspondiente para saber en que forma está adjunto el documento a esta respuesta.
Yo hasta ahora tengo mas experiencia en envíos que en respuestas, ojalá alguien pueda aportar algo mas en este sentido.
saludos
Quizás haya que ojear la documentación correspondiente para saber en que forma está adjunto el documento a esta respuesta.
Yo hasta ahora tengo mas experiencia en envíos que en respuestas, ojalá alguien pueda aportar algo mas en este sentido.
saludos
-
- Posts: 257
- Joined: Wed May 16, 2007 9:40 pm
- Location: Iquique Chile
Re: Leer datos especifico de un XML
Hola Jose
Creo que estamos en las misma, solo he podido enviar documentos, y es la primera vez que me toca a la inversa, recuperar un acrchi desde el webservice, igual seguire investigando y buscando la solucion, si la encuentro, compartire la solucion por aca.. igual esperando la ayuda de otra persona sera bienvenida
Creo que estamos en las misma, solo he podido enviar documentos, y es la primera vez que me toca a la inversa, recuperar un acrchi desde el webservice, igual seguire investigando y buscando la solucion, si la encuentro, compartire la solucion por aca.. igual esperando la ayuda de otra persona sera bienvenida
Fivewin 11.07
Re: Leer datos especifico de un XML
Tienes que mirar en la DOC, que significa href , de lo contrario, va a ser casi imposible de donde obtener el fichero;
Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
-
- Posts: 257
- Joined: Wed May 16, 2007 9:40 pm
- Location: Iquique Chile
Re: Leer datos especifico de un XML
Gracias Rafa Por Contestar, bueno hasta ahorita no he podido solucionar el tema, he leido bastantes foro pero ninguno me lleva a solucionar el tema, te cuento lo que he investigado..
Sobre tu pregunta del href contien el nombre del archivo
return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn
Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
Tambien he visto que en SOAPUI, tiene un request en cual tiene una viñeta XML y RAW, este ultimo contiene la informacion del docuemento que viene adjunto, esa seria la otra solucion leer el RAW, pero como le digo al servidor que en vez de contestarme con un XML me traiga un RAW, o existe alguna funcion que lo convierta.
Este es parte del programa que envia la pregunta y recupera la respuesta
doc = CreateObject( "MSXML2.DOMDocument" )
ohttp = CreateObject( "MSXML2.XMLHTTP" )
ohttp:Open( "POST" , ts_servidor , .F. )
ohttp:SetRequestHeader( "SOAPAction" , "Resultado" )
ohttp:SetRequestHeader( "Content-Type" , "text/xml" )
doc:LoadXML( ctext )
// ?"test "+doc:text
// ?"xml1 "+doc:xml
//envia la pregunta
ohttp:Send( doc:xml )
// do while doc:readystate<>4
// ?alltrim(str(doc:readystate))
// millisec(50)
// enddo
// ?"resp "+ohttp:responsetext
// ?"XML "+ohttp:responsexml:xml
//recupera la respuesta en formato XML
response = ohttp:responseText
Sobre tu pregunta del href contien el nombre del archivo
return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn
Include href="cid:return=216af389-dcc9-4770-80fb-610304b481e0@http://cl/zofri/sve/prd/wsn" xmlns="http://www.w3.org/2004/08/xop/include"/>
Tambien he visto que en SOAPUI, tiene un request en cual tiene una viñeta XML y RAW, este ultimo contiene la informacion del docuemento que viene adjunto, esa seria la otra solucion leer el RAW, pero como le digo al servidor que en vez de contestarme con un XML me traiga un RAW, o existe alguna funcion que lo convierta.
Este es parte del programa que envia la pregunta y recupera la respuesta
doc = CreateObject( "MSXML2.DOMDocument" )
ohttp = CreateObject( "MSXML2.XMLHTTP" )
ohttp:Open( "POST" , ts_servidor , .F. )
ohttp:SetRequestHeader( "SOAPAction" , "Resultado" )
ohttp:SetRequestHeader( "Content-Type" , "text/xml" )
doc:LoadXML( ctext )
// ?"test "+doc:text
// ?"xml1 "+doc:xml
//envia la pregunta
ohttp:Send( doc:xml )
// do while doc:readystate<>4
// ?alltrim(str(doc:readystate))
// millisec(50)
// enddo
// ?"resp "+ohttp:responsetext
// ?"XML "+ohttp:responsexml:xml
//recupera la respuesta en formato XML
response = ohttp:responseText
Fivewin 11.07