Con la finalidad de validar nuestro XML-UBL antes de enviar a los ws de Sunat (valida cualquier xml contra xsd), es necesario validar nuestro Archivo.
Copio la rutina en .net (vb) que facilmente podemos incluirlo en nuestras librerias para consumirlo desde foxpro.
Imports System
Imports System.Xml
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.Xml.Schema
Imports System.Windows.Forms
Namespace validarxml
<ClassInterface(ClassInterfaceType.AutoDual)> _
<ProgId("validarxml")> _
Public Class validarxml
Public Resultado As Boolean
Public txtresultado As String
Private Sub AdminEventoValidacion(sender As Object, args As ValidationEventArgs)
Resultado = False
End Sub
Public Function validarXML(ByVal txtxml As String, ByVal txtxsd As String) As String
Resultado = True
txtresultado = "OK"
'DESDE EL LLAMADO SE DEBERA VALIDAR LA EXISTENCIA DE LOS ARCHIVOS ENVIADOS COMO PARAMETROS
Dim xmlR As New XmlTextReader(txtxml)
Dim xsdR As New XmlValidatingReader(xmlR)
Try
xsdR.Schemas.Add(Nothing, txtxsd)
xsdR.ValidationType = ValidationType.Schema
AddHandler xsdR.ValidationEventHandler, New ValidationEventHandler(AddressOf AdminEventoValidacion)
While xsdR.Read()
Application.DoEvents()
End While
xsdR.Close()
Catch ex As Exception
txtresultado = ex.Message
End Try
' SI NO HAY NINGUN ERROR REVOLVERA OK DE LO CONTRARIO DEVOLVERA ERROR
xsdR.Close()
Return txtresultado
End Function
End Class
End Namespace
De hecho que puede ser mejorado, pero es lo mas simple que encontré y adapté.