2

xmlエラーログの詳細をwinformsアプリケーションのユーザーに表示したいと思います。そして、その仕事をするための最良のコントロールを探しています。

エラーデータには、エラーが発生した時点のすべてのサーバー変数が含まれています。これらは、次のような効果のあるXMLドキュメントにフォーマットされています。

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

保存されている文字列からこのデータを読み取り、Windowsフォームを介してユーザーに便利な方法で表示したいと思います。XML Notepadは、xmlをフォーマットするという優れた機能を果たしますが、アイテムの詳細を名前:文字列形式で表示したいので、実際には探していませんでした。

何か提案がありますか、それとも私が探しているのか、カスタム実装ですか?

[編集]表示する必要のあるデータのセクション:

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

4 に答える 4

1

XSLTを使用して XML データを変換できます
。もう 1 つのオプションは、XLinq を使用することです。
具体的なコード例が必要な場合は、サンプル データを提供してください

EDIT : XML ファイルのサンプル XSLT 変換は次のとおりです。

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

XslCompiledTransformクラスを使用して、この変換を適用できます。次のような出力が得られるはずです。

サーバー変数:
ALL_HTTP:HTTP_CONNECTION:close HTTP_USER_AGENT:Mozilla/4.0 (互換性のある MSIE 6.0; Windows NT 5.1; SV1)
AUTH_TYPE:
HTTPS:off
HTTPS_KEYSIZE:
HTTP_USER_AGENT:Mozilla/4.0 (互換性のある; MSIE 6.0; Windows NT 5.1;S )

クエリ文字列項目:
tid:196

于 2008-09-01T08:42:23.827 に答える
0

DataGridViewコントロールを使用してみることができます。例を表示するには、DevStudioにXMLファイルをロードし、XMLを右クリックして、[データグリッドの表示]を選択します。コントロールを使用するには、コントロールのAPIドキュメントを読む必要があります。

于 2008-09-01T08:21:08.883 に答える
0

ツリービュー コントロールを使用し、再帰的な XLinq アルゴリズムを使用してそこにデータを配置できます。私は、ユーザーがカスタム XML 表現を構築できるようにするインターフェイスを自分で作成しましたが、それは非常にうまく機能しました。

于 2008-09-01T10:26:19.707 に答える
0

XML データバインディングを参照してください。Visual Studio またはxsd.exeを使用して XSD から DataSet またはクラスを生成しSystem.Xml.Serialization.XmlSerializer、必要に応じて使用して XML をオブジェクト/DataSet に変換します。オブジェクトをマッサージします。それらをグリッドで表示します。

于 2008-09-01T11:01:40.760 に答える