2008-09-01 229 views
1

我想在winforms应用程序中向用户显示xml错误日志的详细信息,并且正在寻找最好的控件来完成这项工作。在Winforms控件中显示XML数据

错误数据包含发生错误时的所有服务器变量。这些都被格式化成,看起来到的效果的XML文档:我想从字符串读取这些数据,它被保存在并通过在一个窗口形式显示给用户

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

有用的方法。 XML记事本在格式化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> 

回答

1

您可以使用XSLT
转换您的XML数据另一种选择是使用XLinq。
如果你想具体的代码示例为我们提供了样本数据

编辑: 这里是一个示例XSLT转换为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> 

你可以把这个变换使用XslCompiledTransform类。 它应该给输出这样的:

服务器变量:
ALL_HTTP:HTTP_CONNECTION:关闭HTTP_USER_AGENT:Mozilla的/ 4.0(兼容MSIE 6.0; Windows NT的5.1; SV1)
AUTH_TYPE:
HTTPS:关
HTTPS_KEYSIZE:
HTTP_USER_AGENT:Mozilla的/ 4.0(兼容; MSIE 6.0; Windows NT的5.1; S)

查询字符串项目:
TID:19 6

0

你可以尝试使用DataGridView控制。要查看示例,请在DevStudio中加载XML文件,然后右键单击XML并选择“查看数据网格”。您需要阅读控件上的API文档才能使用它。

0

您可以使用treeview控件并使用递归XLinq算法将数据放在那里。我自己用接口允许用户构建自定义的XML表示,并且它的工作非常好。