2008-09-01 22 views
1

Je souhaite afficher les détails d'un journal d'erreurs xml à un utilisateur dans une application WinForms et je recherche le meilleur contrôle pour faire le travail.Affichage des données XML dans un contrôle Winforms

Les données d'erreur contiennent toutes les variables de serveur au moment où l'erreur s'est produite. Celles-ci ont été mis en forme dans un document XML qui ressemble à quelque chose à l'effet de:

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

Je voudrais lire ces données de la chaîne qui est stockée et l'afficher à l'utilisateur via une forme de fenêtres dans un manière utile. XML Notepad fait un travail de formatage xml cool, mais ce n'est pas vraiment je cherchais car je préfèrerais plutôt afficher les détails de l'article dans un format Name: string.

Des suggestions ou suis-je à la recherche et une implémentation personnalisée?

[EDIT] Une section des données qui doit être affichée:

<?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> 

Répondre

1

Vous pouvez transformer vos données XML en utilisant XSLT
Une autre option consiste à utiliser XLinq.
Si vous voulez exemple concret de code nous fournir des échantillons de données

EDIT: est ici de transformer un échantillon XSLT pour votre fichier 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> 

Vous pouvez appliquer cette transformation à l'aide XslCompiledTransform classe. Il devrait donner quelque chose comme ceci:

variables serveur:
ALL_HTTP: HTTP_CONNECTION: près HTTP_USER_AGENT: Mozilla/4.0 (compatible MSIE 6.0; Windows NT 5.1; SV1)
AUTH_TYPE:
HTTPS: off
HTTPS_KEYSIZE:
HTTP_USER_AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; S)

éléments de chaîne de requête:
tid: 19 6

0

Vous pouvez essayer d'utiliser le contrôle DataGridView. Pour voir un exemple, chargez un fichier XML dans DevStudio, puis faites un clic droit sur le fichier XML et sélectionnez "View Data Grid". Vous aurez besoin de lire la documentation de l'API sur le contrôle pour l'utiliser.

0

Vous pouvez utiliser un contrôle treeview et utiliser un algorithme XLinq récursif pour y placer les données. Je l'ai fait moi-même avec une interface permettant à un utilisateur de construire une représentation XML personnalisée et cela a très bien fonctionné.