代码之家  ›  专栏  ›  技术社区  ›  FryHard

在WinForms控件中显示XML数据

  •  2
  • FryHard  · 技术社区  · 16 年前

    我希望在WinForms应用程序中向用户显示XML错误日志的详细信息,并正在寻找执行此操作的最佳控件。

    错误数据包含错误发生时的所有服务器变量。这些文件已被格式化为XML文档,其效果如下:

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

    我想从存储它的字符串中读取此数据,并以有用的方式通过Windows窗体将其显示给用户。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>
    
    4 回复  |  直到 12 年前
        1
  •  1
  •   aku    16 年前

    您可以使用 XSLT
    另一种选择是使用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 班级。 它应该给出如下输出:

    服务器变量:
    所有连接:关闭http用户代理:mozilla/4.0(兼容msie 6.0;Windows NT 5.1;SV1)
    AuthyType:
    http:OFF
    HTTPSYKEYSIZE:
    http_user_agent:mozilla/4.0(兼容;msie 6.0;Windows NT 5.1;s)

    查询字符串项:
    蒂德:196

        2
  •  0
  •   ljs TheVillageIdiot    16 年前

    可以使用TreeView控件并使用递归XLinq算法将数据放入其中。我自己也用一个接口来实现这一点,它允许用户构建一个自定义的XML表示,而且它工作得非常好。

        3
  •  0
  •   Eugene Yokota    16 年前

    XML data binding . 使用Visual Studio或 xsd.exe 要从XSD生成数据集或类,请使用 System.Xml.Serialization.XmlSerializer 如果需要将XML转换为对象/数据集。按摩物体。在网格中显示它们。

        4
  •  0
  •   Tim Cooper    12 年前

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