How to show Xml data in the winform in the XML fashion?

前端 未结 3 1690
甜味超标
甜味超标 2021-02-08 10:57

My winform application communicates with the web service. For some requirement, I need to present the web service response in the XML format in the winform application.

相关标签:
3条回答
  • 2021-02-08 11:46

    One easy way is to embed an Internet Explorer ActiveX control in the form and load the XML into it. It would be displayed with IE's default stylesheet for XML.
    Sort of like using an iframe element in a web page.

    0 讨论(0)
  • 2021-02-08 11:58

    Make use of TreeView control

    Here is working code to display xml on 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());
        }
    }
    
    0 讨论(0)
  • 2021-02-08 12:03

    Try to apply indent to the xmlText, like:

    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
    
    0 讨论(0)
提交回复
热议问题