Question

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.

Les données d'erreur contiennent toutes les variables du serveur au moment où l'erreur s'est produite.Ceux-ci ont été formatés dans un document XML qui ressemble à :

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

Je voudrais lire ces données à partir de la chaîne dans laquelle elles sont stockées et les afficher à l'utilisateur via un formulaire Windows de manière utile.Le Bloc-notes XML fait un bon travail de formatage XML, mais ce n'est pas vraiment ce que je recherche car je préférerais plutôt afficher les détails de l'élément dans un Nom :chaîne format.

Des suggestions ou est-ce que je recherche 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>
Était-ce utile?

La solution

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

MODIFIER:voici un exemple de transformation 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 en utilisant XslCompiledTransform classe.Cela devrait donner un résultat comme ceci :

Variables du serveur :
ALL_HTTP:HTTP_CONNECTION:close HTTP_USER_AGENT:Mozilla/4.0 (compatible MSIE 6.0 ;Windows NT 5.1 ;SV1)
AUTH_TYPE :
HTTPS : désactivé
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 :
marée:196

Autres conseils

Vous pouvez utiliser un contrôle arborescent 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 créer une représentation XML personnalisée et cela a très bien fonctionné.

Voir Liaison de données XML.Utilisez Visual Studio ou xsd.exe pour générer DataSet ou des classes à partir de XSD, puis utilisez System.Xml.Serialization.XmlSerializer si nécessaire pour transformer votre XML en objets/DataSet.Massez les objets.Affichez-les dans une grille.

Vous pouvez essayer d'utiliser le DataGridView contrôle.Pour voir un exemple, chargez un fichier XML dans DevStudio, puis cliquez avec le bouton droit sur le XML et sélectionnez « Afficher la grille de données ».Vous devrez lire la documentation de l'API sur le contrôle pour l'utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top