2009-11-09 7 views
11

Il est assez simple de placer le texte externe d'un noeud XML dans une zone de texte WPF. Mais existe-t-il un moyen d'obtenir la zone de texte pour mettre en forme le texte en tant que document XML? Y a-t-il un contrôle différent qui fait cela?Afficher du code XML dans une zone de texte WPF

Répondre

21

Cela devrait faire l'affaire:

protected string FormatXml(string xmlString) 
    { 
     XmlDocument doc = new XmlDocument(); 

     doc.LoadXml(xmlString); 

     StringBuilder sb = new StringBuilder(); 

     System.IO.TextWriter tr = new System.IO.StringWriter(sb); 

     XmlTextWriter wr = new XmlTextWriter(tr); 

     wr.Formatting = Formatting.Indented; 

     doc.Save(wr); 

     wr.Close(); 

     return sb.ToString(); 
    } 
4

Vous pouvez attacher à la liaison un convertisseur et appeler à l'intérieur du convertisseur le code de formatage.

C'est un exemple de code formats XML:

public string FormatXml(string xml) 
{ 
    var doc = new XmlDocument(); 
    doc.LoadXml(xml); 
    var stringBuilder = new StringBuilder(); 
    var xmlWriterSettings = new XmlWriterSettings 
            {Indent = true, OmitXmlDeclaration = true}; 
    doc.Save(XmlWriter.Create(stringBuilder, xmlWriterSettings)); 
    return stringBuilder.ToString(); 
} 

Et un test démontre l'utilisation:

public void TestFormat() 
{ 
    string xml = "<root><sub/></root>"; 
    string expectedXml = "<root>" + Environment.NewLine + 
         " <sub />" + Environment.NewLine + 
         "</root>"; 
    string formattedXml = FormatXml(xml); 

    Assert.AreEqual(expectedXml, formattedXml); 
} 
3

est-il un contrôle différent qui fait cela?

Oui, affichez simplement le fichier XML dans un contrôle de navigateur.

<WebBrowser x:Name="wbOriginalXml" /> 

Accédez simplement à un XML enregistré

wbOriginalXml.Navigate(new Uri(@"C:\TempResult\Manifest.xml")); 

Les résultats sont automatiquement tree-ed dans le navigateur où les noeuds peuvent être réduits:

enter image description here

+0

Cette ne fonctionne que sur les fichiers XML, pas sur les variables XML en mémoire – DdW

+0

@DdW Oui, il faudrait enregistrer dans un fichier temporaire si le XML est en mémoire. – OmegaMan

Questions connexes