Domanda

Vorrei visualizzare i dettagli di un registro degli errori XML a un utente in un'applicazione Winforms e sto cercando il miglior controllo per svolgere il lavoro.

I dati di errore contengono tutte le variabili del server nel momento in cui si è verificato l'errore.Questi sono stati formattati in un documento XML che assomiglia a qualcosa come:

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

Vorrei leggere questi dati dalla stringa in cui sono memorizzati e visualizzarli all'utente tramite un modulo Windows in modo utile.Blocco note XML fa un ottimo lavoro di formattazione XML, ma non è proprio quello che sto cercando poiché preferirei visualizzare i dettagli dell'elemento in un Nome :corda formato.

Qualche suggerimento o sto cercando un'implementazione personalizzata?

[EDIT] Una sezione dei dati che devono essere visualizzati:

<?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>
È stato utile?

Soluzione

Puoi trasformare i tuoi dati XML utilizzando XSLT
Un'altra opzione è utilizzare XLinq.
Se desideri un esempio di codice concreto, forniscici dati di esempio

MODIFICARE:ecco un esempio di trasformazione XSLT per il tuo file 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>

Puoi applicare questa trasformazione usando XslCompiledTransform classe.Dovrebbe dare un output come questo:

Variabili del server:
ALL_HTTP:HTTP_CONNECTION:chiudi HTTP_USER_AGENT:Mozilla/4.0 (compatibile MSIE 6.0;Windows NT 5.1;SV1)
AUTH_TYPE:
HTTPS: disattivato
HTTPS_KEYSIZE:
HTTP_USER_AGENT:Mozilla/4.0 (compatibile;MSIE 6.0;Windows NT 5.1;S )

Elementi della stringa di query:
tid:196

Altri suggerimenti

Potresti utilizzare un controllo di visualizzazione ad albero e utilizzare un algoritmo XLinq ricorsivo per inserire i dati lì.L'ho fatto io stesso con un'interfaccia che consente a un utente di creare una rappresentazione XML personalizzata e ha funzionato davvero bene.

Vedere Associazione di dati XML.Utilizzare Visual Studio o xsd.exe per generare DataSet o classi da XSD, quindi utilizzare System.Xml.Serialization.XmlSerializer se necessario, per trasformare il tuo XML in oggetti/DataSet.Massaggia gli oggetti.Visualizzali in griglia.

Potresti provare a usare il file DataGridView controllo.Per vedere un esempio, caricare un file XML in DevStudio, quindi fare clic con il pulsante destro del mouse sull'XML e selezionare "Visualizza griglia dati".Dovrai leggere la documentazione API sul controllo per usarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top