Per Mausklick bewerten und Feedback geben
MSDN
MSDN Library
Entwicklerbibliothek
.NET-Entwicklung
XML im .NET Framework
 Design von XML-Notepad 2006
Design von XML-Notepad 2006
Veröffentlicht: 01. Okt 2006 | Aktualisiert: 01. Okt 2006
Von Chris Lovett

In diesem Artikel wird die neue Version von XML-Notepad vorgestellt. Das Tool wurde zuerst im Jahr 1998 eingeführt, war aber seit mehreren Jahren nicht erhältlich. Diese Version nutzt System.Xml und weist neue Funktionen auf.

Ich habe nun endlich die Zeit gefunden, ein Versprechen einzuhalten, dass ich einem bei MSDN beschäftigten Freund gemacht habe. Im Jahr 1998 haben wir eine Version von XML-Notepad ausgeliefert, die von Murray Low in C++ geschrieben wurde. Später wurden dann XML-Standards anstelle dieser Version unterstützt, und da die Zeit für die Behebung von Mängeln nicht gegeben war, wurde XML-Notepad aus MSDN entfernt. Murray hat aber anscheinend so gute Arbeit geleistet, dass MSDN mit Anfragen überschüttet wurde, Notepad wieder verfügbar zu machen; also bat MSDN mich, einen Ersatz zu entwickeln. Ich habe seit 1999 an System.Xml in C# gearbeitet und dachte mir also, ich konnte unter Verwendung von .NET Framework ziemlich schnell einen Ersatz bereitstellen. Allerdings hat sich dann herausgestellt, dass die Aufgabe doch länger als erwartet dauerte. Glücklicherweise hat sich ein guter Freund, Michael Corning, für die Sache interessiert, mich bei der Stange gehalten und sogar selbst einige interessante Features hinzugefügt. Dan Doris hat ebenfalls einen Teil beigetragen und bei der Fehlersuche geholfen. Als Ergebnis steht nun ein Tool bereit, das sich für eine schnelle Anzeige und Bearbeitung von XML-Dokumenten als nützlich erweisen sollte. Denjenigen unter Ihnen, die die Originalversion kennen, ist die Benutzeroberfläche wahrscheinlich ein vertrautes Bild: eine Strukturansicht auf der linken Seite, die mit einer Knotentextansicht auf der rechten Seite verknüpft ist, sowie bequeme Ausrichtungs-Symbolleistenschaltflächen für das schnelle Verschieben von Knoten nach oben oder unten in der Struktur (siehe Abbildung 1). Da die erste Version bereits so weit zurückliegt, musste ich die interessanten Funktionen in System.Xml nutzen und einige Features hinzufügen, die in der Originalversion nicht enthalten waren:


  • Inkrementelle Suche (STRG+I) in der Struktur- und der Textansicht, damit Sie während der Eingabe zu dem am besten passenden Knoten navigieren konnen.

  • Ausschneiden/Kopieren/Einfügen mit vollständiger Namespace-Unterstützung in einem einfachen, interoperablen XML-Format.

  • Drag & Drop-Unterstützung für die einfache Manipulation der Struktur auch über verschiedene Instanzen von XML-Notepad hinweg und aus dem Dateisystem heraus.

  • Unbegrenztes Rückgängig/Wiederholen für alle Bearbeitungsfunktionen.

  • Mehrzeilige Vor-Ort- und Popup-Bearbeitung grosser Textknotenwerte und IntelliSense basierend auf erwarteten Elementen und Attributen.

  • Konfigurierbare Schriftarten und Farben mithilfe des Optionsdialogfelds.

  • Umfassendes Dialogfeld Suchen/Ersetzen mit Unterstützung für regex- und XPath-Ausdrücke.

  • Gute Leistung bei groöen XML-Dokumenten (ein Dokument mit 3 MB wird in ungefähr einer Sekunde geladen).

  • Sofortige Validierung des XML-Schemas während der Bearbeitung, wobei Fehler und Warnungen im Aufgabenlistenfenster angezeigt werden.

  • Unterstützung benutzerdefinierter Editoren für die Datentypen Datum, DatumZeit, Uhrzeit und Farbe.

  • HTML-Anzeige für die Anzeige von XSLT-Transformationsergebnissen.

  • Integriertes XML-Vergleichs-Tool.

Auf dieser Seite

Entwurf und Implementierung Entwurf und Implementierung

        Validierung, IntelliSense und benutzerdefinierte Editoren
        Validierung, IntelliSense und benutzerdefinierte Editoren

        Unbegrenztes Rückgängig/Wiederholen
        Unbegrenztes Rückgängig/Wiederholen
Komponententest Komponententest
Schlussbemerkung Schlussbemerkung

Entwurf und Implementierung

Im herunterladbaren Paket finden Sie das XmlNotepad dll-Kernprojekt, ein Anwendungsprojekt für das Erstellen von XmlNotepad.exe, die in der XML-Vergleichsfunktion verwendeten XmlDiff-Bibliotheksprojekte, ein Setupprojekt zum Erstellen des .msi-Installationsprogramms, das UnitTest-Projekt für die Überprüfung von XML-Notepad sowie ein Hilfeprojekt für das Erstellen der Datei Help.chm unter Verwendung der Workshop-Tools für die HTML-Hilfe.

Systemeigener Imagecache

Abbildung 1: Benutzeroberfläche von XML-Notepad

Im nachfolgenden Diagramm sehen Sie die Beziehungen zwischen den Hauptklassen für die Benutzeroberfläche. Das Hauptformular enthält alle Benutzeroberflächenelemente von der Aufgabenliste bis hin zur Hauptansicht XmlTreeView mit Grossenanpassungen dazwischen; dies ist der Startpunkt für Dialogfelder wie z. B. FormSearch, FormSchemas, FormOption und FormAbout.

Systemeigener Imagecache

Abbildung 2: Hauptklassen der Benutzeroberfläche

Das Hauptregisterkarten-Steuerelement enthält XmlTreeView und XsltViewer für die Anzeige der XSL-Ausgabe. Die Ansicht XmlTreeView enthält eine Strukturansicht auf der linken und eine Knotentextansicht auf der rechten Seite und koordiniert den Bildlauf zwischen diesen beiden Ansichten. Sowohl die Strukturansicht als auch die Knotentextansicht bieten dieselben IntelliSense-Bearbeitungsfunktionen und verwenden eine TextEditorOverlay-Komponente. XmlTreeView implementiert IFindTarget, was vom Dialogfeld Suchen (FormSearch) für die Implementierung der Funktion Suchen/Ersetzen verwendet wird.

Systemeigener Imagecache

Abbildung 3: Das Dialogfeld Suchen

Das Dialogfeld Suchen unterstützt Volltext-, regex- und XPath-Ausdrücke und kann nach Namen oder Werten filtern. Hier sehen Sie die XPath-Suche, die auch eine Tabelle für die Eingabe von in der Abfrage verwendeten Namespacepräfixzuordnungen bereitstellt.

Validierung, IntelliSense und benutzerdefinierte Editoren

Die wichtigste neue Funktion ist IntelliSense, die von den über den SchemaCache bereitgestellten XML-Schemainformationen gestützt wird. Wenn ein Element oder Attribut zum Beispiel durch einen XSD-simpleType definiert ist und dieser simpleType eine Liste von Enumerationsaspekten enthält, erhalten Sie eine Dropdownliste wie diese:

Systemeigener Imagecache

Abbildung 4: Dropdownlistenwerte

Die Funktionsweise ist wie folgt: Die Überprüfung wird nach jedem Bearbeitungsvorgang ausgeführt, um das Dokument zu validieren und Fehler in der Aufgabenliste aufzuführen. Dieser Prozess fügt auch jedem Element oder Attribut im XmlDokument System.Xml.Schema.XmlSchemaType-Informationen hinzu. Bei der Bearbeitung des Werts dieses Knotens gibt TextEditorOverlay dann mithilfe des XmlIntelliSenseProvider eine Liste moglicher Werte zurück. Im Beispiel oben werden die Werte von den simpleType-Enumerationsaspekten zurückgegeben. Für den Elementnamen IntelliSense in der Strukturansicht ruft der XmlIntelliSenseProvider erneut die Überprüfung auf, erfasst GetExpectedParticles und GetExpectedAttributes im System.Xml.Schema.XmlSchemaValidator und verwendet dies zur Bereitstellung von IntelliSense.

Systemeigener Imagecache

Abbildung 5: IntelliSense in der Strukturansicht

TextEditorOverlay unterstützt auch benutzerdefinierte Editoren wie den DateTimeEditor oder den UriBuilder oder ColorBuilder. Es gibt zwei Typen von benutzerdefinierten Editoren: IXmlEditors, bei denen es sich um Inline-Editoren handelt, die das standardmässige TextBox ersetzen, und IXmlBuidlers, bei denen es sich um Popupdialogfelder wie OpenFileDialog oder ColorDialog handelt. Der Editorentyp wird von den Schematypinformationen abgeleitet: xs:date, xs:time, xs:datetime führt zum DateTimeEditor, und xs:anyURI führt zum UriBuilder. Sie konnen das Schema im Namespace http://schemas.microsoft.com/Visual-Studio-IntelliSense auch mit einem benutzerdefinierten vs:builder-Attribut versehen. Weitere Informationen finden Sie in der Hilfe.

Unbegrenztes Rückgängig/Wiederholen

Für die Implementierung von "Rückgängig" oder "Wiederholen" wurde ein häufig verwendetes Entwurfsmuster von Command-Objekten mit Undo- und Redo-Methoden befolgt. Der UndoManager sammelt all diese in einer Liste. Der Status des UndoManager steuert dann den Status Aktiviert/Deaktiviert der Menüelemente Rückgängig/Wiederholen. Wenn der Benutzer das Menüelement Rückgängig wählt, wird die Undo-Methode für den aktiven Befehl aufgerufen, und dieser Befehl wird in den Wiederholen-Stapel gestellt.

Systemeigener Imagecache

Abbildung 7: Befehlsobjekte in der Strukturansicht

Der PasteCommand ist etwas Besonderes, da er zufälligen XML-Text aus dem Zwischenspeicher nimmt und ihn im Kontext des gegenwärtig in der Struktur ausgewählten Elements analysiert und dabei den Namespace im Bereich erbt. Die Hilfsklasse TreeData verwendet den besonderen XmlTextReader-Konstruktor, der einen XmlParserContext als Eingabe verwendet.

Komponententest

Eine eingehende Überprüfung des neuen XML-Notepad war erforderlich, und ich suchte nach einer Entschuldigung, die neuen UnitTest-Projekte von Visual Studio 2005 verwenden zu konnen. Der UnitTest wird vom TestManager unter dem neuen Menü Test aus Visual Studio heraus ausgeführt, wobei XML-Notepad gestartet und die 15 von mir geschriebenen Testmethoden ausgeführt werden.

Systemeigener Imagecache

Abbildung 8: UnitTests

Wenn der Test abgeschlossen ist, konnen Sie auf das Fenster mit den Testergebnissen klicken und die Option Codeabdeckungsergebnisse auswählen In der aufgerufenen Zusammenfassung wird dann angegeben, wie viele Blocke in jeder Funktion abgedeckt wurden. Wenn Sie auf die Zeile in der Liste doppelklicken, wird eine farbcodierte Quellcodeansicht aufgerufen, die genau anzeigt, welcher Code abgedeckt wurde. Dies machte es mir sehr einfach, die Codeabdeckung auf rund 85 Prozent zu bringen.

Der einzige Trick dabei ist, dass Sie keine Codeabdeckung erhalten, wenn Sie die Tests unter dem Debugger ausführen, und das UnitTest-Projekt erstellt neben Ihrer Losung eine Datei mit dem Namen localtestrun.testrunconfig und XmlNotepad.vsmdi, die Sie nicht verlieren sollten. Andernfalls funktioniert die Codeabdeckung ebenfalls nicht. Davon abgesehen muss ich sagen, dass diese neue UnitTest-Funktion wirklich eine der besten neuen Funktionen in Visual Studio 2005 ist.

Schlussbemerkung

Ich hoffe, dass Sie mit dem neuen XML-Notepad viel Spass haben werden. Feedback und Anregungen sind willkommen. Senden Sie diese bitte per E-Mail an wdxtools@microsoft.com


© 2012 Microsoft. Alle Rechte vorbehalten. Nutzungsbedingungen | Markenzeichen | Informationen zur Datensicherheit
Page view tracker