El error que te puedes llegar a encontrar al convertir un Objeto en Xml, puede ser este "carácter no válido. Línea 1, posición 1". En ocasiones por cuestiones de estandarización de las comunicaciones entre puntos se nos facilita un XSD que comprende una estructura de comunicaciones.
Para su utilización desde código serializamos el esquema XSD que se nos facilite con la siguiente herramienta:
- ruta de instalación\NETFX X.X Tools\xsd.exe NombreFichero.xsd /classes /language:vb /namespace:NombreEspacioNombres
Esto nos convertirá nuestro esquema XSD en una clase de vb.
En el programa utilizaremos esta clase de vb para rellenar de datos el Objeto que luego convertiremos en XML.
System.Xml.XmlDocument.LoadXml(ObjetoToXML(ObjetoXsd, "ISO-8859-1"))
Public Function ObjetoToXML(ByVal objeto As Object, ByVal codificacion As String) As String
Dim writer As XmlWriter
Dim settings As New XmlWriterSettings()
Dim ms As New System.IO.MemoryStream
Dim xml As String
Dim serial As XmlSerializer
serial = New XmlSerializer(objeto.GetType)
'CREAMOS EL WRITER
settings.Indent = True
settings.IndentChars = vbTab
settings.Encoding = Encoding.GetEncoding(codificacion)
writer = XmlWriter.Create(ms, settings)
serial.Serialize(writer, objeto)
1.- SE OBTIENE EL XML
xml = Encoding.GetEncoding(codificacion).GetString(ms.GetBuffer())
2.- ELIMINAMOS LOS RESTOS DEL PRINCIPIO SOBRE TODO SI LA CODIFICACION ES ISO
xml = xml.Substring(xml.IndexOf(Convert.ToChar(60)))
3.- ELIMINAMOS LOS RESTOS DEL FINAL DEL XML
xml = xml.Substring(0, (xml.LastIndexOf(Convert.ToChar(62)) + 1))
Return xml.Trim
End Function
La solución al problema que planteábamos arriba la obtenemos en los puntos marcados 2 y 3, eliminando todo lo que nos sobre del Xml, que de normal suelen ser unos caracteres extraños que vienen del Buffer.
Como comentario decir que este error con la codificación ISO no se producía en todas las versiones del Microsoft .NET Framework, pero si a partir de la 4.0.
Espero que te sirva de ayuda.
Comentarios
Publicar un comentario