Pregunta

Me gustaría mostrar detalles de un registro de errores xml a un usuario en una aplicación winforms y estoy buscando el mejor control para hacer el trabajo.

Los datos del error contienen todas las variables del servidor en el momento en que ocurrió el error.Estos han sido formateados en un documento XML que parece algo así como:

<error>
    <serverVariables>
        <item>
            <value>
        </item>
    </serverVariables>
    <queryString>
        <item name="">
            <value string=""> 
        </item>
    </queryString>      
</error>

Me gustaría leer estos datos de la cadena en la que están almacenados y mostrárselos al usuario a través de un formulario de Windows de una manera útil.El Bloc de notas XML hace un excelente trabajo al formatear xml, pero en realidad no es lo que estoy buscando, ya que preferiría mostrar los detalles del elemento en un Nombre :cadena formato.

¿Alguna sugerencia o estoy buscando una implementación personalizada?

[EDITAR] Una sección de los datos que deben mostrarse:

<?xml version="1.0" encoding="utf-8"?>
<error host="WIN12" type="System.Web.HttpException" message="The file '' does not exist." source="System.Web" detail="System.Web.HttpException: The file '' does not exist. at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath) at" time="2008-09-01T07:13:08.9171250+02:00" statusCode="404">
  <serverVariables>
    <item name="ALL_HTTP">
      <value string="HTTP_CONNECTION:close HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) " />
    </item>
    <item name="AUTH_TYPE">
      <value string="" />
    </item>
    <item name="HTTPS">
      <value string="off" />
    </item>
    <item name="HTTPS_KEYSIZE">
      <value string="" />
    </item>
    <item name="HTTP_USER_AGENT">
      <value string="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" />
    </item>
  </serverVariables>
  <queryString>
    <item name="tid">
      <value string="196" />
    </item>
  </queryString>
</error>
¿Fue útil?

Solución

Puede transformar sus datos XML usando XSLT
Otra opción es utilizar XLinq.
Si desea un ejemplo de código concreto, proporciónenos datos de muestra.

EDITAR:Aquí hay una transformación XSLT de muestra para su archivo XML:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="//error/serverVariables">
      <xsl:text>Server variables:
      </xsl:text>
      <xsl:for-each select="item">
        <xsl:value-of select="@name"/>:<xsl:value-of select="value/@string"/>
        <xsl:text>
        </xsl:text>
      </xsl:for-each>
    </xsl:template>
    <xsl:template match="//error/queryString">
      <xsl:text>Query string items:
      </xsl:text>
      <xsl:for-each select="item">
        <xsl:value-of select="@name"/>:<xsl:value-of select="value/@string"/>
        <xsl:text>
        </xsl:text>
      </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Puedes aplicar esta transformación usando Transformación Xsl Compilada clase.Debería dar un resultado como este:

Variables del servidor:
ALL_HTTP:HTTP_CONNECTION:cerrar HTTP_USER_AGENT:Mozilla/4.0 (compatible con MSIE 6.0;Windows NT 5.1;SV1)
TIPO DE AUTENTICACIÓN:
HTTPS: desactivado
HTTPS_KEYSIZE:
HTTP_USER_AGENT:Mozilla/4.0 (compatible;MSIE 6.0;Windows NT 5.1;S)

Elementos de la cadena de consulta:
tid:196

Otros consejos

Podría usar un control de vista de árbol y usar un algoritmo XLinq recursivo para colocar los datos allí.Lo hice yo mismo con una interfaz que permite al usuario crear una representación XML personalizada y funcionó muy bien.

Ver Enlace de datos XML.Utilice Visual Studio o xsd.exe para generar DataSet o clases desde XSD, luego use System.Xml.Serialization.XmlSerializer si es necesario para convertir su XML en objetos/conjunto de datos.Masajea los objetos.Muéstrelos en cuadrícula.

Podrías intentar usar el DataGridView control.Para ver un ejemplo, cargue un archivo XML en DevStudio y luego haga clic derecho en el XML y seleccione "Ver cuadrícula de datos".Deberá leer la documentación API del control para usarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top