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.
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.
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());
}
}
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