Как отобразить данные XML в форме win в формате XML? - PullRequest
9 голосов
/ 05 июля 2011

Мое приложение winform связывается с веб-сервисом. По некоторым требованиям мне нужно представить ответ веб-службы в формате XML в приложении winform.

Я могу сериализовать экземпляр типа ответа (класса) в строку XML. Но когда я показываю эту строку в поле расширенного текста, она, очевидно, отображается как непрерывная строка; не как XML, как показано ниже.

<UserServiceAccesses>
- <UserServiceAccess>
-   <Service>
       <ID>0</ID> 
       <LocalID>Loggerr</LocalID> 
       <SystemID>-1</SystemID> 
       <ServiceType>U</ServiceType> 
       <Name>MyLogger</Name> 
       </Service>
    <ClientPermissions /> 
  </UserServiceAccess>
- <UserServiceAccess>
-     <Service>
         <ID>0</ID> 
         <LocalID>Logger2</LocalID> 
         <SystemID>-1</SystemID> 
         <ServiceType>U</ServiceType> 
         <Name>MyLogger2</Name> 
     </Service>
     <ClientPermissions /> 
  </UserServiceAccess>
<UserServiceAccesses>

Здесь UserServiceAccesses - это класс, обладающий свойством типа UserServiceAccess. Тогда UserServiceAccess имеет свойства типа Service, ClientPermissions

Как я могу это сделать? Он может быть в любой форме (дерево, таблица, текст и т. Д.), Но должен читаться как XML. Поскольку существует много веб-методов, которые мы вызываем из приложения, структура XML каждый раз будет разной, и поэтому у нас не может быть определенной схемы.

Ответы [ 3 ]

19 голосов
/ 05 июля 2011

Используйте TreeView

Вот рабочий код для отображения xml на TreeView :

using System;
using System.Windows.Forms;
using System.Xml;

public class XmlTreeDisplay : System.Windows.Forms.Form
{
    private System.Windows.Forms.TreeView treeXml = new TreeView();

    public XmlTreeDisplay()
    {
        treeXml.Nodes.Clear();
        this.Controls.Add(treeXml);
        // Load the XML Document
        XmlDocument doc = new XmlDocument();
        try
        {
            doc.LoadXml("<books><A property='a'><B>text</B><C>textg</C><D>99999</D></A></books>");
            //doc.Load("");
        }
        catch (Exception err)
        {

            MessageBox.Show(err.Message);
            return;
        }

        ConvertXmlNodeToTreeNode(doc, treeXml.Nodes);
        treeXml.Nodes[0].ExpandAll();
    }

    private void ConvertXmlNodeToTreeNode(XmlNode xmlNode,
      TreeNodeCollection treeNodes)
    {

        TreeNode newTreeNode = treeNodes.Add(xmlNode.Name);

        switch (xmlNode.NodeType)
        {
            case XmlNodeType.ProcessingInstruction:
            case XmlNodeType.XmlDeclaration:
                newTreeNode.Text = "<?" + xmlNode.Name + " " +
                  xmlNode.Value + "?>";
                break;
            case XmlNodeType.Element:
                newTreeNode.Text = "<" + xmlNode.Name + ">";
                break;
            case XmlNodeType.Attribute:
                newTreeNode.Text = "ATTRIBUTE: " + xmlNode.Name;
                break;
            case XmlNodeType.Text:
            case XmlNodeType.CDATA:
                newTreeNode.Text = xmlNode.Value;
                break;
            case XmlNodeType.Comment:
                newTreeNode.Text = "<!--" + xmlNode.Value + "-->";
                break;
        }

        if (xmlNode.Attributes != null)
        {
            foreach (XmlAttribute attribute in xmlNode.Attributes)
            {
                ConvertXmlNodeToTreeNode(attribute, newTreeNode.Nodes);
            }
        }
        foreach (XmlNode childNode in xmlNode.ChildNodes)
        {
            ConvertXmlNodeToTreeNode(childNode, newTreeNode.Nodes);
        }
    }
    public static void Main()
    {
        Application.Run(new XmlTreeDisplay());
    }
}
19 голосов
/ 05 июля 2011

Попробуйте применить отступ к xmlText, например:

XDocument xDocument = XDocument.Parse(xmlText);
myRichTextBox.Text = xDocument.ToString();//ToString will format xml string with indent
//as XDocument class overrides ToString and return xml with indent
8 голосов
/ 05 июля 2011

Один простой способ - встроить элемент управления ActiveX Internet Explorer в форму и загрузить в него XML. Он будет отображаться с таблицей стилей IE по умолчанию для XML.
Вроде как использование элемента iframe на веб-странице.

...