2008-09-01 8 views
1

Я хотел бы отобразить детали журнала ошибок xml для пользователя в приложении winforms, и я ищу лучший элемент управления для выполнения задания.Отображение данных XML в элементе управления Winforms

Данные ошибки содержат все переменные sever в момент возникновения ошибки. Они были отформатированы в документ XML, который выглядит к действию:

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

Я хотел бы, чтобы прочитать эти данные из строки, она хранится в и отображать его пользователю через форму окна в полезный путь. XML Notepad делает классную работу по форматированию xml, но на самом деле это не так, потому что я предпочитаю отображать детали элемента в формате Name: string.

Любые предложения или я ищу и пользовательскую реализацию?

[EDIT] Часть данных, которые должны быть отображены:

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

Вы можете преобразовать данные XML, используя XSLT
Другой вариант - использовать XLinq.
Если вы хотите конкретный пример кода предоставляют нам данные выборки

EDIT: вот пример 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. Чтобы увидеть пример, загрузите XML-файл в DevStudio, а затем щелкните правой кнопкой мыши XML и выберите «View Data Grid». Вам нужно будет прочитать документацию API для элемента управления, чтобы использовать его.

0

Вы можете использовать элемент управления treeview и использовать рекурсивный алгоритм XLinq для размещения данных. Я сам это сделал с интерфейсом, позволяющим пользователю создавать пользовательское представление XML, и он работал очень хорошо.

0

См. XML data binding. Используйте Visual Studio или xsd.exe для создания DataSet или классов из XSD, затем используйте System.Xml.Serialization.XmlSerializer, если необходимо, чтобы превратить ваш XML в объекты/DataSet. Массаж объектов. Отобразите их в сетке.

 Смежные вопросы

  • Нет связанных вопросов^_^