在Winforms控件中显示XML数据

3
我希望在一个WinForms应用程序中向用户显示XML错误日志的详细信息,并寻找最佳控件来执行此操作。
错误数据包含错误发生时的所有服务器变量。这些变量已经格式化为一个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个回答

1

您可以使用XSLT转换XML数据。
另一个选项是使用XLinq。
如果您想要具体的代码示例,请提供样本数据。

编辑: 这里是一个针对您的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 (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 )

查询字符串项:
tid:196


0
你可以尝试使用DataGridView控件。为了看到一个例子,在DevStudio中加载一个XML文件,然后右键点击XML并选择“查看数据网格”。你需要阅读该控件的API文档以使用它。

0
你可以使用一个树形视图控件,并使用递归的XLinq算法将数据放入其中。我自己用过这种方法,允许用户构建自定义XML表示界面,效果非常好。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接