我的winform应用程序与Web服务进行通信。对于某些要求,我需要在winform应用程序中以XML格式呈现Web服务响应。
我可以将响应类型(类)实例序列化为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可读的。由于我们从应用程序调用了许多Web方法,因此每次XML结构都会有所不同,因此我们无法确定模式。
答案 0 :(得分:19)
使用 TreeView控件
以下是在 treeview 上显示xml的工作代码:
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());
}
}
答案 1 :(得分:19)
尝试将缩进应用于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
答案 2 :(得分:8)
一种简单的方法是在表单中嵌入Internet Explorer ActiveX控件并将XML加载到其中。它将与IE的XML默认样式表一起显示 有点像在网页中使用iframe元素。