Отображение XML-данных в элементе управления Winforms
-
09-06-2019 - |
Вопрос
Я хотел бы отобразить подробную информацию о журнале ошибок 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>
Решение
Вы можете преобразовать свои XML-данные с помощью XSLT
Другой вариант - использовать 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>
Вы можете применить это преобразование с помощью Xslкомпилированная трансформация класс.Он должен выдавать примерно такой результат:
Переменные сервера:
ALL_HTTP: HTTP_CONNECTION:закрыть 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; Ы )Элементы строки запроса:
tid: 196
Другие советы
Вы можете использовать древовидный элемент управления и использовать рекурсивный алгоритм XLinq, чтобы поместить туда данные. Я сделал это сам с помощью интерфейса, позволяющего пользователю создать собственное представление XML, и это сработало очень хорошо.
См. привязку данных XML .
Используйте Visual Studio или xsd.exe , чтобы создать DataSet или классы из XSD, а затем использовать System.Xml.Serialization.XmlSerializer
, если необходимо превратить ваш XML в объекты / DataSet. Помассируйте предметы. Отобразить их в сетке.
Вы можете попробовать использовать элемент управления DataGridView
. Чтобы увидеть пример, загрузите файл XML в DevStudio, затем щелкните правой кнопкой мыши XML и выберите " Просмотр таблицы данных " ;. Чтобы использовать его, вам необходимо прочитать документацию по API для элемента управления.