Отображение XML-данных в элементе управления Winforms

StackOverflow https://stackoverflow.com/questions/37591

  •  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 для элемента управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top