Foros del Web » Programación para mayores de 30 ;) » .NET »

Servicios Web serializacion atributos

Estas en el tema de Servicios Web serializacion atributos en el foro de .NET en Foros del Web. Hola, estoy intentando obtener esta estructura XML a través de un Servicio Web mediante la serialización de una clase. - <Books> - <LIBROS> <TITULO>Titulo del ...
  #1 (permalink)  
Antiguo 22/09/2008, 07:54
 
Fecha de Ingreso: septiembre-2008
Mensajes: 3
Antigüedad: 15 años, 7 meses
Puntos: 0
Servicios Web serializacion atributos

Hola, estoy intentando obtener esta estructura XML a través de un Servicio Web mediante la serialización de una clase.

- <Books>
- <LIBROS>
<TITULO>Titulo del libro</TITULO>
- <CAMPO ID="Moneda"> 9.95 </CAMPO>
- <CAMPO ID="Autor"> Nombre del Autor </CAMPO>
</LIBROS>
</Books>

No estoy segura si se puede obtener directamente mediante la serialización, al menos no he encontrado nada por Internet. Alguien me puede ayudar??

Os dejo las clases con las que he estado probando:

Imports System.Xml.Serialization
Public Class Books
<XmlElement(ElementName:="LIBROS")> _
Public Book As Book
End Class 'Books

Public Class Book

<XmlElement(ElementName:="TITULO")> _
Public TITLE As String
<XmlElement(ElementName:="CAMPO")> _
Public PRICE As Price
<XmlAttribute(AttributeName:="ID")> _
Public campo As String
End Class

Public Class Price
<XmlAttribute(AttributeName:="ID")> _
Public campo As String
Public price As Decimal
End Class

Su resultado es el siguiente, es lo más cerca que me he quedado de lo que necesito.

- <Books>
- <LIBROS ID="Titulo">
<TITULO>A Book Title</TITULO>
- <CAMPO ID="Moneda">
<price>9.95</price>
</CAMPO>
</LIBROS>
</Books>
  #2 (permalink)  
Antiguo 23/09/2008, 09:46
Avatar de diegopedro  
Fecha de Ingreso: agosto-2006
Ubicación: Santiago
Mensajes: 120
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Servicios Web serializacion atributos

Hola

Esta es una clase que fabrique en un minuto, serializa pero en forma manual
aqui te dejo el codigo

Imports Microsoft.VisualBasic
Imports System.Xml

Public Class GeneraXml
Public nameatri As String
Public valueatri As String


Public Sub xmldeclaracion(ByRef docxml As XmlDocument, _
ByVal version As String, _
ByVal Encoding As String)
Dim xdec As XmlDeclaration = docxml.CreateXmlDeclaration(version, Encoding, "")
docxml.AppendChild(xdec)
End Sub
Public Sub xmlnodocero(ByRef docxml As XmlDocument, _
ByVal nameelemento As String, _
ByVal valueelemento As String)
Dim xelecero As XmlElement = docxml.CreateElement(nameelemento)
If nameatri <> Nothing Then
xelecero.SetAttribute(nameatri, valueatri)
End If
If valueelemento <> Nothing Then
xelecero.InnerText = valueelemento
End If
docxml.AppendChild(xelecero)
End Sub
Public Sub xmlnodopadre(ByRef docxml As XmlDocument, _
ByVal nameelemento As String, _
ByVal valueelemento As String, _
ByRef nodopadre As XmlElement _
)
nodopadre = docxml.CreateElement(nameelemento)
If nameatri <> Nothing Then
nodopadre.SetAttribute(nameatri, valueatri)
End If
If valueelemento <> Nothing Then
nodopadre.InnerText = valueelemento
End If
docxml.DocumentElement.AppendChild(nodopadre)
End Sub
Public Sub xmlnodohijo(ByRef docxml As XmlDocument, _
ByVal nameelemento As String, _
ByVal valueelemento As String, _
ByVal nodopadre As XmlElement, _
ByRef nodohijo As XmlElement _
)
nodohijo = docxml.CreateElement(nameelemento)
If nameatri <> Nothing Then
nodohijo.SetAttribute(nameatri, valueatri)
End If
If valueelemento <> Nothing Then
nodohijo.InnerText = valueelemento
End If
nodopadre.AppendChild(nodohijo)
End Sub
End Class

'**********************
se llama

Public Sub xml_(ByRef xdoc As XmlDocument, _
ByRef nivel1 As XmlElement)
Dim xmlg As New GeneraXml
Dim nivel2 As XmlElement = Nothing
xmlg.xmldeclaracion(xdoc, "1.0", Encoding.UTF8.HeaderName)
'--------------
'/****Nodo cero
xmlg.xmlnodocero(xdoc, "NODO_CERO", Nothing)
'/****fin Nodo cero
'/************************-Cabezera---------
'crea nodo padre
xmlg.xmlnodopadre(xdoc, "PADRE", Nothing, nivel1)
'crea nodo HIJOS
xmlg.xmlnodohijo(xdoc, "HIJO1", "MI DATO1", nivel1, nivel2)
xmlg.xmlnodohijo(xdoc, "HIJO2", "MI DATO2", nivel1, nivel2)
End Sub
__________________
Es facil apretar tornillos, pero lo complejo es saber que tornillo apretar
  #3 (permalink)  
Antiguo 23/09/2008, 20:38
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Respuesta: Servicios Web serializacion atributos

Ya que tienes tu estructura definida (tu clase), desde código puedes obtener la referencia para hacer la deserializacion (ejemplo en c# porque no tengo mucho tiempo de pasarlo a vb.net jeje)
puedes exponer un método que reciba un XMlDocument (que contiene tu definicion de archivo xml) y hacer lo siguiente

Ejemplo

Código:
private void WorkXML(XMLDocument xDoc)
{
Books objBook = null;	
XmlSerializer slz = new XmlSerializer(typeof(Books));

foreach (XmlNode xNode in xDoc.FirstChild.ChildNodes)
            {
                try
                {
                    //Serializa el nodo
                    objBook = slz.Deserialize(new System.IO.StringReader(xNode.OuterXml)) as Books;
                    //... ya tienes todo en tu objBook
                    //ejemplo .- objBook.LIBROS
                }
                catch {}
            }
}
Con ello ya todo lo trabajas con objetos definidos y te ahorras leer childs de XML, parents, elements, etc.. ya que todo lo tienes en objetos

Espero haberme dado a entender

Si tengo time te lo paso a vb.net

Cualquier cosa por aqui andamos _(aunque de repente me desaparezco por la carga de trabajo que tengo )

Saludos
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:37.