Pergunta

Gostaria de exibir detalhes de um log de erros xml para um usuário em um aplicativo winforms e estou procurando o melhor controle para fazer o trabalho.

Os dados do erro contêm todas as variáveis ​​do servidor no momento em que o erro ocorreu.Eles foram formatados em um documento XML que se parece com:

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

Gostaria de ler esses dados da string em que estão armazenados e exibi-los ao usuário por meio de um formulário do Windows de uma forma útil.O XML Notepad faz um ótimo trabalho de formatação de xml, mas não é realmente o que estou procurando, pois prefiro exibir os detalhes do item em um Nome :corda formatar.

Alguma sugestão ou estou procurando uma implementação personalizada?

[EDITAR] Uma seção dos dados que precisa ser exibida:

<?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>
Foi útil?

Solução

Você pode transformar seus dados XML usando XSLT
Outra opção é usar XLinq.
Se você quiser um exemplo de código concreto, forneça dados de amostra

EDITAR:aqui está um exemplo de transformação XSLT para seu arquivo 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>

Você pode aplicar esta transformação usando XslCompiledTransform aula.Deve dar uma saída assim:

Variáveis ​​do servidor:
ALL_HTTP:HTTP_CONNECTION:fechar HTTP_USER_AGENT:Mozilla/4.0 (compatível com MSIE 6.0;Windows NT 5.1;SV1)
AUTH_TYPE:
HTTPS: desativado
HTTPS_KEYSIZE:
HTTP_USER_AGENT:Mozilla/4.0 (compatível;MSIE 6.0;Windows NT 5.1;S)

Itens de string de consulta:
horário: 196

Outras dicas

Você poderia usar um controle treeview e um algoritmo XLinq recursivo para colocar os dados lá.Eu mesmo fiz isso com uma interface que permite ao usuário criar uma representação XML personalizada e funcionou muito bem.

Ver Vinculação de dados XML.Utilize o Visual Studio ou xsd.exe para gerar DataSet ou classes de XSD, então use System.Xml.Serialization.XmlSerializer se necessário, transforme seu XML em objetos/DataSet.Massageie os objetos.Exiba-os na grade.

Você poderia tentar usar o DataGridView ao controle.Para ver um exemplo, carregue um arquivo XML no DevStudio e clique com o botão direito no XML e selecione "Exibir grade de dados".Você precisará ler a documentação da API no controle para usá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top