CLR: .Net / Mono / Boo / Otros CLR > ASP .NET

 Mostrar Un Xml Por Pantalla

(1/1)

Pucho:
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:
Hola Pucho!

Te contare que puedes escribirlo como tu quieras usando el control XML usando un xsl:

* Xml (Clase)</li>
* Xml vía ASP.NET QuickStart</li>Sólo tienes que darle permisos al usuario ASP.NET, o NETWORK SERVICE, dependiendo del SO, en esa carpeta.

Saludos,

xcx:
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 ---  Dim comentario As XmlNode        Dim nodo As XmlNode        Dim nodo1 As XmlNode        Dim nodo2 As XmlNode        Dim nodo3 As XmlNode        Dim nodo4 As XmlNode        Dim nodo5 As XmlNode        Dim nodo6 As XmlNode        'Se comienza la construcción del xml        Dim dtsDatos As DataSet = objDBConsultor.gstDatosGenerales(id, 0, &#34;&#34;, &#34;&#34;, &#34;&#34;, False, Date.Now, 0, 0, &#34;&#34;, &#34;&#34;, &#34;&#34;, &#34;&#34;, 0, &#34;&#34;, &#34;&#34;, &#34;&#34;, False, &#34;&#34;, Date.Now, 6)        If Not (dtsDatos.Tables(&#34;Datos&#34;) Is Nothing) Then            If (dtsDatos.Tables(&#34;Datos&#34;).Rows.Count = 1) Then                With dtsDatos.Tables(&#34;Datos&#34;).Rows(0)                    Dim xmlDoc As XmlDocument = New XmlDocument                    'Se hace declaraciones                    Dim nododeclaracion As XmlDeclaration = xmlDoc.CreateXmlDeclaration(&#34;1.0&#34;, &#34;ISO-8859-1&#34;, &#34;&#34;)                    xmlDoc.AppendChild(nododeclaracion)                    'Se referencia el xslt                    xmlDoc.AppendChild(xmlDoc.CreateProcessingInstruction(&#34;xml-stylesheet&#34;, &#34;type='text/xsl' href='&#34; + objGeneral.xmlBase + &#34;/visualizar/xsl.xsl'&#34;))                     Dim nilAttribute As XmlAttribute = xmlDoc.CreateAttribute(&#34;xsi&#34;, &#34;nil&#34;, &#34;http://www.w3.org/2001/XMLSchema-instance&#34;)                    nilAttribute.Value = &#34;true&#34;                     'Se crea el nodo raiz                    Dim nodoRaiz As XmlNode = xmlDoc.CreateElement(&#34;cv&#34;)                    nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute(&#34;xmlns&#34;))                    nodoRaiz.Attributes(&#34;xmlns&#34;).Value = objGeneral.xmlBase                    nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute(&#34;xmlns:core&#34;))                    nodoRaiz.Attributes(&#34;xmlns:core&#34;).Value = objGeneral.xmlBase & &#34;/core&#34;                    nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute(&#34;xmlns:xsi&#34;))                    nodoRaiz.Attributes(&#34;xmlns:xsi&#34;).Value = &#34;http://www.w3.org/2001/XMLSchema-instance&#34;                    nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute(&#34;xsi&#34;, &#34;schemaLocation&#34;, &#34;http://www.w3.org/2001/XMLSchema-instance&#34;))                     nodoRaiz.Attributes(&#34;xsi:schemaLocation&#34;).Value = objGeneral.xmlBase & &#34; &#34; & objGeneral.xmlBase & &#34;/xsdCurrCons.xsd&#34;                    nodoRaiz.Attributes.Append(xmlDoc.CreateAttribute(&#34;strFechaGenero&#34;))                    nodoRaiz.Attributes(&#34;strFechaGenero&#34;).Value = String.Format(&#34;{0:yyyy/MM/dd}T{0:hh:mm:ss}.0&#34;, DateTime.Now)                     nodo = xmlDoc.CreateElement(&#34;DatosGenerales&#34;)                    nodo1 = xmlDoc.CreateElement(&#34;strRut&#34;)                    nodo1.InnerText = String.Format(&#34;{0:###,###}&#34;, .Item(&#34;intRut&#34;)) & &#34;-&#34; & objGeneral.getDigRut(.Item(&#34;intRut&#34;))                    nodo.AppendChild(nodo1)                     nodo1 = xmlDoc.CreateElement(&#34;strNombrecompleto&#34;)                    If (Not (.Item(&#34;strApellidoMaterno&#34;) Is DBNull.Value)) Then                        nodo1.InnerText = .Item(&#34;strNombres&#34;) + &#34; &#34; + .Item(&#34;strApellidoPaterno&#34;) + &#34; &#34; + .Item(&#34;strApellidoMaterno&#34;)                    Else                        nodo1.InnerText = .Item(&#34;strNombres&#34;) + &#34; &#34; + .Item(&#34;strApellidoPaterno&#34;)                    End If                    nodo.AppendChild(nodo1)...nodoRaiz.AppendChild(nodo) xmlDoc.AppendChild(nodoRaiz)  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 ---  ...Dim oContext As HttpContextoContext = New HttpContext(Request, Response)'oContext.Response.ContentType = &#34;text/html&#34;Dim writer As New XmlTextWriter(oContext.Response.Output)writer.Formatting = Formatting.IndentedxmlDoc.WriteContentTo(writer)writer.Flush() xmlDoc = Nothing...  Y bueno, en la página aspx, la declaración así

--- Código: Text --- &#60;%@ Page ResponseEncoding=&#34;ISO-8859-1&#34; Language=&#34;vb&#34; AutoEventWireup=&#34;false&#34; Codebehind=&#34;clsReporte.aspx.vb&#34; Inherits=&#34;ReportVisit.clsReporte&#34; %&#62;  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:
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:
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:

Navegación

[0] Índice de Mensajes

Ir a la versión completa