• Domingo 22 de Diciembre de 2024, 13:15

Autor Tema:  Mostrar Un Xml Por Pantalla  (Leído 4757 veces)

Pucho

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Mostrar Un Xml Por Pantalla
« en: Miércoles 28 de Marzo de 2007, 21:53 »
0
Hola, estoy usando .NET 2.0. Mi problema es el siguiente.
Lo que quiero hacer es mostrar un XML que recupero desde una Base de datso en forma de string y mostrarlo por pantalla. Es decir mostrarlo como se muestran los XML cuando se abren con el IIS. Lo que hice hasta ahora es guardar el XML en el disco y después con un Response.Redirect("archivo.xml") accesarlo y funcionaba muy bien. El problema es que en producción no tengo permisos de escritura en el disco...entonces lo que tengo que hacer es mostrarlo pero sin guardarlo en el disco...no se como lograrlo.
Se agradece ayuda

Saludos

sergiotarrillo

  • Moderador
  • ******
  • Mensajes: 1059
    • Ver Perfil
    • http://sergiot2.com/blog
Re: Mostrar Un Xml Por Pantalla
« Respuesta #1 en: Jueves 29 de Marzo de 2007, 05:02 »
0
Hola Pucho!

Te contare que puedes escribirlo como tu quieras usando el control XML usando un xsl:
Sólo tienes que darle permisos al usuario ASP.NET, o NETWORK SERVICE, dependiendo del SO, en esa carpeta.

Saludos,


Sergio Tarrillo
Blog]miBlog[/url]

No me visiten!

xcx

  • Miembro MUY activo
  • ***
  • Mensajes: 175
  • Nacionalidad: cl
    • Ver Perfil
    • Fotos y captura
Re: Mostrar Un Xml Por Pantalla
« Respuesta #2 en: Jueves 29 de Marzo de 2007, 15:39 »
0
Hola!! Puedes hacerlo con el xmldocument y despues, utilizar el escritor del response.write..
Se extraen los datos de una consulta a unas tablas en una bd, y se obtiene en un DataSet...
Código: Text
  1.  
  2.  Dim comentario As XmlNode
  3.         Dim nodo As XmlNode
  4.         Dim nodo1 As XmlNode
  5.         Dim nodo2 As XmlNode
  6.         Dim nodo3 As XmlNode
  7.         Dim nodo4 As XmlNode
  8.         Dim nodo5 As XmlNode
  9.         Dim nodo6 As XmlNode
  10.         'Se comienza la construcción del xml
  11.         Dim dtsDatos As DataSet = objDBConsultor.gstDatosGenerales(id, 0, "", "", "", False, Date.Now, 0, 0, "", "", "", "", 0, "", "", "", False, "", Date.Now, 6)
  12.         If Not (dtsDatos.Tables("Datos") Is Nothing) Then
  13.             If (dtsDatos.Tables("Datos").Rows.Count = 1) Then
  14.                 With dtsDatos.Tables("Datos").Rows(0)
  15.                     Dim xmlDoc As XmlDocument = New XmlDocument
  16.                     'Se hace declaraciones
  17.                     Dim nododeclaracion As XmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", "")
  18.                     xmlDoc.AppendChild(nododeclaracion)
  19.                     'Se referencia el xslt
  20.                     xmlDoc.AppendChild(xmlDoc.CreateProcessingInstruction("xml-stylesheet", "type='text/xsl' href='" + objGeneral.xmlBase + "/visualizar/xsl.xsl'"))
  21.  
  22.                     Dim nilAttribute As XmlAttribute = xmlDoc.CreateAttribute("xsi", "nil", "http://www.w3.org/2001/XMLSchema-instance")
  23.                     nilAttribute.Value = "true"
  24.  
  25.                     'Se crea el nodo raiz
  26.                     Dim nodoRaiz As XmlNode = xmlDoc.CreateElement("cv")
  27.                     nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute("xmlns"))
  28.                     nodoRaiz.Attributes("xmlns").Value = objGeneral.xmlBase
  29.                     nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute("xmlns:core"))
  30.                     nodoRaiz.Attributes("xmlns:core").Value = objGeneral.xmlBase & "/core"
  31.                     nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute("xmlns:xsi"))
  32.                     nodoRaiz.Attributes("xmlns:xsi").Value = "http://www.w3.org/2001/XMLSchema-instance"
  33.                     nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute("xsi", "schemaLocation", "http://www.w3.org/2001/XMLSchema-instance"))
  34.  
  35.                     nodoRaiz.Attributes("xsi:schemaLocation").Value = objGeneral.xmlBase & " " & objGeneral.xmlBase & "/xsdCurrCons.xsd"
  36.                     nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute("strFechaGenero"))
  37.                     nodoRaiz.Attributes("strFechaGenero").Value = String.Format("{0:yyyy/MM/dd}T{0:hh:mm:ss}.0", DateTime.Now)
  38.  
  39.                     nodo = xmlDoc.CreateElement("DatosGenerales")
  40.                     nodo1 = xmlDoc.CreateElement("strRut")
  41.                     nodo1.InnerText = String.Format("{0:###,###}", .Item("intRut")) & "-" & objGeneral.getDigRut(.Item("intRut"))
  42.                     nodo.AppendChild(nodo1)
  43.  
  44.                     nodo1 = xmlDoc.CreateElement("strNombrecompleto")
  45.                     If (Not (.Item("strApellidoMaterno") Is DBNull.Value)) Then
  46.                         nodo1.InnerText = .Item("strNombres") + " " + .Item("strApellidoPaterno") + " " + .Item("strApellidoMaterno")
  47.                     Else
  48.                         nodo1.InnerText = .Item("strNombres") + " " + .Item("strApellidoPaterno")
  49.                     End If
  50.                     nodo.AppendChild(nodo1)
  51. ...
  52. nodoRaiz.AppendChild(nodo)
  53.  xmlDoc.AppendChild(nodoRaiz)
  54.  
  55.  
Luego con lo de abajo, hago que la página aspx en vez de devolver un típico html, devuelvo el xml propiamente tal.. aunque es raro ver un xml en un aspx :lol:
Código: Text
  1.  
  2.  
  3. ...
  4. Dim oContext As HttpContext
  5. oContext = New HttpContext(Request, Response)
  6. 'oContext.Response.ContentType = "text/html"
  7. Dim writer As New XmlTextWriter(oContext.Response.Output)
  8. writer.Formatting = Formatting.Indented
  9. xmlDoc.WriteContentTo(writer)
  10. writer.Flush()
  11.  
  12. xmlDoc = Nothing
  13. ...
  14.  
  15.  
Y bueno, en la página aspx, la declaración así
Código: Text
  1.  
  2. <%@ Page ResponseEncoding="ISO-8859-1" Language="vb" AutoEventWireup="false" Codebehind="clsReporte.aspx.vb" Inherits="ReportVisit.clsReporte" %>
  3.  
  4.  
Y bueno... eso es mas o menos a grandes rasgos lo que he hecho en un proyecto que está funcionando sin ningún problema.. Espero que te sirva y te oriente... Porque a mi me costó bastante lo del tema xml, así que se lo complejo que puede llegar a ser.. Sobre todo con lo del esquema y validandolo con el xmlspy... . Chiabela!!!

Pucho

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Mostrar Un Xml Por Pantalla
« Respuesta #3 en: Jueves 29 de Marzo de 2007, 17:23 »
0
Gracias Sergio y XCX! bueno, siguiendo un poco lo que XCX habia hecho, encontré una forma más sencilla de hacerlo. Aca pongo la solución por si a otra persona le pasa.
Tuve que modificar el archivo .ASPX sacándole todo y dejando solo el encabezado. Es decir que solo quede asi tola la pagina:
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

luego en el codebehid:

string sxml = xml.OuterXml;//este es el XML representado en forma de string
Response.ContentType = "text/xml";//aca está el truco. Indicarle que es un XML
Response.Write(sxml);//enviamos a la página.

Funcionó perfecto!  :D

Saludos

Pucho

xcx

  • Miembro MUY activo
  • ***
  • Mensajes: 175
  • Nacionalidad: cl
    • Ver Perfil
    • Fotos y captura
Re: Mostrar Un Xml Por Pantalla
« Respuesta #4 en: Jueves 29 de Marzo de 2007, 17:29 »
0
Ah.... quizás me falto decir eso.. aunque en el code puse lo que tenia que tener el aspx, asumi que el resto lo iban a sacar por ser especificamente tener eso.. pero filo.. En todo caso... al hacer un override del response.write, estas devolviendo un xml, por eso habia comentado la linea de código que indicaba que era un documento xml ^_^..
[Edit]
Ahora que me doy cuenta, lo has hecho con c#... Aún no lo implemento en c# porque estoy terminando un proyecto que posteriormente tendrá lo que puse pero en c#..  :D
Me alegro de que te haya servido...  Chiabela :smartass: