2011-07-05 7 views
8

Moja aplikacja WinForm komunikuje się z usługą sieci Web. W przypadku niektórych wymagań muszę przedstawić odpowiedź usługi sieci Web w formacie XML w aplikacji WinForm.Jak wyświetlić dane Xml w winformie w stylu XML?

Służy do serializacji instancji typu odpowiedzi (klasy) do ciągu XML. Ale kiedy pokazuję ten ciąg w polu tekstowym, jest on oczywiście wyświetlany jako ciągły ciąg znaków; nie jako XML, jak pokazano poniżej.

<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> 

Tutaj UserServiceAccesses jest klasa, która ma właściwość typu UserServiceAccess. Następnie UserServiceAccess ma właściwości typu: Service, ClientPermissions

Jak mogę to zrobić? Może być w dowolnej formie (drzewo, tabela, tekst itp.), Ale powinien być czytelny jako XML. Ponieważ istnieje wiele metod internetowych, które wywołujemy z poziomu aplikacji, za każdym razem struktura XML byłaby inna i dlatego nie możemy mieć określonego schematu.

+0

czy opublikowany kod jest pomocny? –

Odpowiedz

17

użycie Marka kontrola TreeView

Tutaj jest kod działa, aby wyświetlić xml na katalogów:

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

To jest świetne. Właśnie tego szukałem. Znalazłem także ten artykuł pomocy MS, który zapewnia przykładowy kod, aby zrobić to samo: https://support.microsoft.com/en-us/kb/317597 – JeffC

8

Jednym z łatwych sposobów jest osadzenie formantu ActiveX programu Internet Explorer w formularzu i załadowanie do niego kodu XML. Byłby wyświetlany z domyślnym arkuszem stylów IE dla XML.
Coś jak przy użyciu elementu iframe na stronie internetowej.

+0

Aby dodać do tej odpowiedzi, to, co wymyśliłem: http://stackoverflow.com/questions/5157545/how-can-i-display-xml-with-webbrowser-control/42080286#42080286 –

19

spróbować zastosować wcięcie do xmlText, jak:

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 
+1

Dobrze mi się powiodło. Dzięki! – TravisWhidden