Summary Beschreibungen auslesen  
Frank Dzaebel, erstellt am: 6.2.2011, zuletzt geändert:  6.2.2011
Kategorie: C# Sprache, .NET-Version: 4.0, [Download]

Summary (Zusammenfassungs) Beschreibungen kann man lokalisiert aus einer XML-Datei lesen. Hier wird das beispielhaft über den  System.Xml.Linq Namensraum mit der Erweiterungsmethode: XPathEvaluate gemacht.
Eine umfassende Bibliothek für diesen Bereich ist zum Beispiel [Jolt.NET] - (mein Beispiel benutzt diese aber nicht):


using System;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
using System.Xml.XPath;

namespace WinReflectSummaryDemo
{
    public partial class Form1 : Form
    {
        string NL = Environment.NewLine;
        string sprache = CultureInfo.CurrentCulture.TwoLetterISOLanguageName;
        string netFramework4Pfad = @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0";

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            PfadeDerStandardOrdnerAusgeben();
        }

        private void PfadeDerStandardOrdnerAusgeben()
        {
            // using System.Xml.XPath;
            Type memberType = typeof(Environment.SpecialFolder);
            AssemblyName assemblyName = memberType.Assembly.GetName();
            string asmPfad = new Uri(assemblyName.CodeBase).AbsolutePath;
            string parentDir = Directory.GetParent(asmPfad).FullName;
            if (assemblyName.Version.Major == 4)
                parentDir = Path.Combine(Environment.GetFolderPath(
                    Environment.SpecialFolder.ProgramFiles), netFramework4Pfad);
            XDocument xml = XDocument.Load(Path.Combine(parentDir, sprache, assemblyName.Name) + ".xml");
            TextBox tb = new TextBox();
            tb.Dock = DockStyle.Fill; tb.Multiline = true;
            tb.ScrollBars = ScrollBars.Both;
            Controls.Add(tb); Width = 400; Height = 400;

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Werte von: " + memberType.Name + NL);

            foreach (string feld in Enum.GetNames(memberType))
            {
                string wert = Environment.GetFolderPath((Environment.SpecialFolder)Enum.Parse(memberType, feld)); 

                string summaryBeschreibung = xml.XPathEvaluate(
                    string.Format(
                       "string(/doc/members/member[@name='{0}']/summary)",
                       "F:" + memberType.FullName.Replace("+", ".") + "." + feld
                )).ToString().Trim();
                sb.AppendFormat("Ordner: {0}, {3}{1}{3}{2}{3}______________{3}",
                    feld, summaryBeschreibung, wert, NL);
            }
            SchreibeZusätzlichePfadeMitEndung(typeof(Application), "Path", tb, sb);
            tb.Text = sb.ToString(); tb.SelectionStart=0;
        }

        private void SchreibeZusätzlichePfadeMitEndung(Type memberType, string endung, TextBox tb, StringBuilder sb)
        {
            AssemblyName assemblyName = memberType.Assembly.GetName();
            string asmPfad = new Uri(assemblyName.CodeBase).AbsolutePath;
            string parentDir = Directory.GetParent(asmPfad).FullName;
            if (assemblyName.Version.Major == 4)
                parentDir = Path.Combine(Environment.GetFolderPath(
                    Environment.SpecialFolder.ProgramFiles), netFramework4Pfad);
            XDocument xml = XDocument.Load(Path.Combine(parentDir, sprache, assemblyName.Name) + ".xml");

            sb.AppendLine(NL+"===================="+NL +
                "Werte von: " + memberType.Name + NL);

            foreach (PropertyInfo prop in memberType.GetProperties())
            {
                if (!prop.Name.EndsWith(endung)) continue;
                string wert = prop.GetValue(null, null) as string;

                string summaryBeschreibung = xml.XPathEvaluate(
                    string.Format(
                       "string(/doc/members/member[@name='{0}']/summary)",
                       "P:" + memberType.FullName.Replace("+", ".") + "." + prop.Name
                )).ToString().Trim();
                sb.AppendFormat("Ordner: {0}, {3}{1}{3}{2}{3}______________{3}",
                    prop.Name, summaryBeschreibung, wert, NL);
            }
        }
    }
}
__________________

Ausgabe des Programmes (hier zum Beispiel ein Windows 7 Ultimate Rechner):

Werte von: SpecialFolder

Ordner: Desktop, 
Der logische Desktop und nicht der physikalische Speicherort im Dateisystem.
C:\Users\Frank Dzaebel\Desktop
______________
Ordner: Programs, 
Das Verzeichnis, das die Programmgruppen des Benutzers enthält.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
______________
Ordner: Personal, 
Das Verzeichnis, das als allgemeines Repository für Dokumente verwendet wird.
C:\Users\Frank Dzaebel\Documents
______________
Ordner: MyDocuments, 
Der Ordner Eigene Dateien.
C:\Users\Frank Dzaebel\Documents
______________
Ordner: Favorites, 
Das Verzeichnis, das als allgemeines Repository für die Favoriten des Benutzers verwendet wird.
C:\Users\Frank Dzaebel\Favorites
______________
Ordner: Startup, 
Das Verzeichnis, das der Programmgruppe Autostart des Benutzers entspricht.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
______________
Ordner: Recent, 
Das Verzeichnis, das die vom Benutzer zuletzt verwendeten Dokumente enthält.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\Recent
______________
Ordner: SendTo, 
Das Verzeichnis, das die Elemente für das Menü Senden an enthält.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\SendTo
______________
Ordner: StartMenu, 
Das Verzeichnis, das die Elemente für das Menü Start enthält.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\Start Menu
______________
Ordner: MyMusic, 
Der Ordner Eigene Musik.
C:\Users\Frank Dzaebel\Music
______________
Ordner: MyVideos, 
Das Dateisystemverzeichnis, das als Repository für Videos dient, die zu einem Benutzer gehören.
C:\Users\Frank Dzaebel\Videos
______________
Ordner: DesktopDirectory, 
Das Verzeichnis, das für das physikalische Speichern von Dateiobjekten auf dem Desktop verwendet wird.
C:\Users\Frank Dzaebel\Desktop
______________
Ordner: MyComputer, 
Der Ordner Arbeitsplatz.

______________
Ordner: NetworkShortcuts, 
Ein Dateisystemverzeichnis, das die Linkobjekte enthält, die im virtuellen Ordner Netzwerkumgebung vorhanden sein können.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\Network Shortcuts
______________
Ordner: Fonts, 
Ein virtueller Ordner, der Schriftarten enthält.
C:\Windows\Fonts
______________
Ordner: Templates, 
Das Verzeichnis, das als allgemeines Repository für Dokumentvorlagen verwendet wird.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\Templates
______________
Ordner: CommonStartMenu, 
Das Dateisystemverzeichnis, das die Programme und Ordner enthält, die im Menü Start für alle Benutzer angezeigt werden.Dieser besondere Ordner ist nur für Windows NT-Systeme gültig.
C:\ProgramData\Microsoft\Windows\Start Menu
______________
Ordner: CommonPrograms, 
Ein Ordner für Komponenten, die von mehreren Anwendungen gemeinsam verwendet werden.Dieser besondere Ordner nur für Windows NT-, Windows 2000- und Windows XP-Systeme gültig.
C:\ProgramData\Microsoft\Windows\Start Menu\Programs
______________
Ordner: CommonStartup, 
Das Dateisystemverzeichnis, das die Programme enthält, die im Ordner Start für alle Benutzer angezeigt werden.Dieser besondere Ordner ist nur für Windows NT-Systeme gültig.
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
______________
Ordner: CommonDesktopDirectory, 
Das Dateisystemverzeichnis, das Dateien und Ordner enthält, die auf dem Desktop für alle Benutzer angezeigt werden.Dieser besondere Ordner ist nur für Windows NT-Systeme gültig.
C:\Users\Public\Desktop
______________
Ordner: ApplicationData, 
Ein Verzeichnis, das als allgemeines Repository für programmspezifische Daten des aktuellen Roamingbenutzers verwendet wird.
C:\Users\Frank Dzaebel\AppData\Roaming
______________
Ordner: PrinterShortcuts, 
Das Dateisystemverzeichnis, das die Linkobjekte enthält, die im virtuellen Ordner Drucker vorhanden sein können.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
______________
Ordner: LocalApplicationData, 
Das Verzeichnis, das als allgemeines Repository für programmspezifische Daten verwendet wird, die von einem aktuellen Benutzer verwendet werden, der kein Roamingbenutzer ist.
C:\Users\Frank Dzaebel\AppData\Local
______________
Ordner: InternetCache, 
Das Verzeichnis, das als allgemeines Repository für temporäre Internetdateien verwendet wird.
C:\Users\Frank Dzaebel\AppData\Local\Microsoft\Windows\Temporary Internet Files
______________
Ordner: Cookies, 
Das Verzeichnis, das als allgemeines Repository für Internetcookies verwendet wird.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\Cookies
______________
Ordner: History, 
Das Verzeichnis, das als allgemeines Repository für die Internetverlaufselemente verwendet wird.
C:\Users\Frank Dzaebel\AppData\Local\Microsoft\Windows\History
______________
Ordner: CommonApplicationData, 
Das Verzeichnis, das als allgemeines Repository für programmspezifische Daten verwendet wird, die von allen Benutzern verwendet werden.
C:\ProgramData
______________
Ordner: Windows, 
Das Windows-Verzeichnis oder SYSROOT.Dies entspricht den Umgebungsvariablen %windir% oder %SYSTEMROOT%.
C:\Windows
______________
Ordner: System, 
Das Verzeichnis System.
C:\Windows\system32
______________
Ordner: ProgramFiles, 
Das Verzeichnis für Programmdateien.
C:\Program Files
______________
Ordner: MyPictures, 
Der Ordner Eigene Bilder.
C:\Users\Frank Dzaebel\Pictures
______________
Ordner: UserProfile, 
Der Profilordner des Benutzers.Anwendungen sollten keine Dateien oder Ordner auf dieser Ebene erstellen, sie sollten ihre Daten unter den Speicherorten ablegen, auf die von  verwiesen wird.
C:\Users\Frank Dzaebel
______________
Ordner: SystemX86, 
Der Windows-Ordner System.
C:\Windows\system32
______________
Ordner: ProgramFilesX86, 
Der Ordner Programme.
C:\Program Files
______________
Ordner: CommonProgramFiles, 
Das Verzeichnis für Komponenten, die von mehreren Anwendungen gemeinsam genutzt werden.
C:\Program Files\Common Files
______________
Ordner: CommonProgramFilesX86, 
Der Ordner Programme.
C:\Program Files\Common Files
______________
Ordner: CommonTemplates, 
Das Dateisystemverzeichnis, das die für alle Benutzer verfügbaren Vorlagen enthält.Dieser besondere Ordner ist nur für Windows NT-Systeme gültig.
C:\ProgramData\Microsoft\Windows\Templates
______________
Ordner: CommonDocuments, 
Das Dateisystemverzeichnis, das Dokumente enthält, die von allen Benutzern gemeinsam genutzt werden.Dieser besondere Ordner ist für Windows NT-Systeme, Windows 95- und Windows 98-Systeme mit installierter Shfolder.dll gültig.
C:\Users\Public\Documents
______________
Ordner: CommonAdminTools, 
Das Dateisystemverzeichnis, das Verwaltungstools für alle Benutzer des Computers enthält.
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
______________
Ordner: AdminTools, 
Das Dateisystemverzeichnis, das zum Speichern von Verwaltungstools für einen einzelnen Benutzer verwendet wird.Die Microsoft Management Console (MMC) speichert angepasste Konsolen in diesem Verzeichnis, das für den Benutzern von überall aus zugänglich ist.
C:\Users\Frank Dzaebel\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
______________
Ordner: CommonMusic, 
Das Dateisystemverzeichnis, das als Repository für Musikdateien dient, die von allen Benutzern gemeinsam genutzt werden.
C:\Users\Public\Music
______________
Ordner: CommonPictures, 
Das Dateisystemverzeichnis, das als Repository für Bilddateien dient, die von allen Benutzern gemeinsam genutzt werden.
C:\Users\Public\Pictures
______________
Ordner: CommonVideos, 
Das Dateisystemverzeichnis, das als Repository für Musikdateien dient, die von allen Benutzern gemeinsam genutzt werden.
C:\Users\Public\Videos
______________
Ordner: Resources, 
Das Dateisystemverzeichnis, das Ressourcendaten enthält.
C:\Windows\resources
______________
Ordner: LocalizedResources, 
Das Dateisystemverzeichnis, das lokalisierte Ressourcendaten enthält.

______________
Ordner: CommonOemLinks, 
Dieser Wert wird in Windows Vista für die Abwärtskompatibilität erkannt, aber der besondere Ordner selbst wird nicht mehr verwendet.

______________
Ordner: CDBurning, 
Das Dateisystemverzeichnis, das als Stagingbereich für Dateien fungiert, die auf eine CD geschrieben werden sollen.
C:\Users\Frank Dzaebel\AppData\Local\Microsoft\Windows\Burn\Burn
______________

====================
Werte von: Application

Ordner: CommonAppDataPath, 
Ruft den Pfad für die Anwendungsdaten ab, die von allen Benutzern gemeinsam genutzt werden.
C:\ProgramData\Frank Dzaebel\WinReflectSummaryDemo\1.0.0.0
______________
Ordner: ExecutablePath, 
Ruft den Pfad einschließlich des Namens der ausführbaren Datei ab, die zum Starten der Anwendung verwendet wurde.
c:\users\frank dzaebel\documents\visual studio 2010\Projects\WinReflectSummaryDemo\WinReflectSummaryDemo\bin\Debug\WinReflectSummaryDemo.EXE
______________
Ordner: LocalUserAppDataPath, 
Ruft den Pfad für die Anwendungsdaten eines lokalen Benutzers ab, der kein Roaming verwendet.
C:\Users\Frank Dzaebel\AppData\Local\Frank Dzaebel\WinReflectSummaryDemo\1.0.0.0
______________
Ordner: StartupPath, 
Ruft den Pfad ohne den Namen der ausführbaren Datei ab, die zum Starten der Anwendung verwendet wurde.
C:\Users\Frank Dzaebel\Documents\Visual Studio 2010\Projects\WinReflectSummaryDemo\WinReflectSummaryDemo\bin\Debug
______________
Ordner: UserAppDataPath, 
Ruft den Pfad für die Anwendungsdaten eines Benutzers ab.
C:\Users\Frank Dzaebel\AppData\Roaming\Frank Dzaebel\WinReflectSummaryDemo\1.0.0.0
______________