Entwickler-Ecke

IO, XML und Registry - Kommentare mit Umlaut in einer xml Datei einlesen


Emrichm2 - Mi 15.11.17 13:52
Titel: Kommentare mit Umlaut in einer xml Datei einlesen
Hallo Leute,
ich hab ein Programm geschriebn um eine Xml Datei in einer vorgegeben Struktur einzulesen.
Ich habe aber ein Problem wenn ich aus der XML DAtei ein Kommentar z.B:: <!--Binärschwelle-->
einlesen möchte. Meine frage ist wie kann ich das einlesen eines Umlautes in mein Programm integrieren?

XML Datei:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
 <Root>
<!--Biärschwelle-->
    <bin_threshold>
        <quantil>15</quantil>
        <offset>97</offset>
    </bin_threshold>
    <min_area>0</min_area>
    <max_area>10</max_area>
    <min_border_dist>0</min_border_dist>
    <max_border_dist>0</max_border_dist>
    <max_defects_zone1>10</max_defects_zone1>
    <max_defects_zone2>0</max_defects_zone2>
    <first_axis_range>
        <min>177</min>
        <max>217</max>
    </first_axis_range>
    <second_axis_range>
        <min>82</min>
        <max>122</max>
    </second_axis_range>
    <!--AOI-->
    <aoi>
        <x>0</x>
        <y>0</y>
        <w>2600</w>
        <h>2200</h>
    </aoi>
</Root>


Mein C Sharp Programm mit Ausgabe:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
        private void button1_Click(object sender, EventArgs e)
        {
            ////Recipe.Text = ListBox.SelectedItem.ToString();
            //System.Globalization.CultureInfo oCultureInfoCurrent= Thread.CurrentThread.CurrentCulture;

            //// Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE");
            //Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo((int)ECultureTypes.German);

            XmlTextReader xmlReader = new XmlTextReader(@"C:\Users\emrichm2\Desktop\RecipeTest\845613N.xml");
            while (xmlReader.Read())
            {
                switch (xmlReader.NodeType)
                {
                    case XmlNodeType.Element:
                        Recipe.Items.Add("<" + xmlReader.Name + ">");
                        break;
                    //case XmlNodeType.Entit:
                    //    Recipe.Items.Add("<!--" + xmlReader.Name + "-->");
                    //    break;
                    case XmlNodeType.Text:
                        Recipe.Items.Add(xmlReader.Value);
                        break;
                    case XmlNodeType.EndElement:
                        Recipe.Items.Add("");
                        break;

                }
            }

Ich lese die xml datei aus einem Pfad in C sharp ein!

Moderiert von user profile iconChristian S.: XML-Tags hinzugefügt
Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Palladin007 - Mi 15.11.17 14:11

Hallo Emrichm2,

als kleiner Hinweis: Es gibt C# und XML-Tags, mit denen Du den Code im Forum formatieren kannst.
Das findest Du beim Schreiben/Bearbeiten über der Text-Box neben "Bereiche" (ist vielleicht zugeklappt) als DropDown.
Das macht einiges einfacher ;)

Edit: Christian war schneller :)



Zum eigentlichen Problem:

Verstehe ich das richtig, dass Du irgendwelche Informationen aus den Kommentaren der Datei heraus filtern willst?
Das sollte nicht gemacht werden, denn die Kommentare haben prinzipiell den Sinn, dass sie eben nicht beachtet werden und man alles rein schreiben kann und darf.
Besser ist, wenn diese Informationen als eigenes Element oder Attribut geschrieben werden.
Oder - wenn die Kommentare zur Unterscheidung dienen - Du gibst den Elementen einen anderen Namen um sie voneinander zu unterscheiden.

Wenn es aber unbedingt sein muss:
Reading XML comments in C# [https://stackoverflow.com/questions/6277966/reading-xml-comments-in-c-sharp]


Übrigens:
Ich persönlich bin kein Fan von dem XmlReader.
Ich würde eher zu LINQ to XML [https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/concepts/linq/linq-to-xml-overview] empfehlen, das ist mMn. einfacher und strukturierter nutzbar.
Ein Muss ist das aber nicht, nur meine persönliche Meinung.
Wie man Kommentare mit LINQ to XML liest:
c# Reading XML comment using XDocument [https://stackoverflow.com/questions/20481741/c-sharp-reading-xml-comment-using-xdocument]


Emrichm2 - Do 16.11.17 09:04

Hallo Palladin007,

in der xml wie du siehst sind kommentare drin ich lese die xml ein
und mein programm meldet das es keine umnlaute wie ä lesen kann wie kann ich so etwas lösen?
ansonsten funktioniert das programm ganz gut nur wenn ich umlaute hab funktioniert es nicht?

Vieel Grüße!


Th69 - Do 16.11.17 10:39

Hallo,

erhältst du eine Fehlermeldung (Exception)?
Das Stichwort generell dafür lautet: Encoding [https://msdn.microsoft.com/de-de/library/system.text.encoding(v=vs.110).aspx], s. z.B. How to change character encoding of XmlReader [https://stackoverflow.com/questions/961699/how-to-change-character-encoding-of-xmlreader].

Ich nehme mal an, die XML-Datei ist als UTF-8 abgespeichert, also verwende Encoding.UTF8.
Verwende dafür dann XmlReader.Create:

C#-Quelltext
1:
2:
3:
using (XmlReader xmlReader = XmlReader.Create(new StreamReader(filename, Encoding.UTF8)))
{
}


Emrichm2 - Do 16.11.17 10:57

Hallo,
ja die exception siehe anhang.
genau an der stelle xo das ä in binärschwelle ist tritt die
exception auf.


Delete - Do 16.11.17 11:26

- Nachträglich durch die Entwickler-Ecke gelöscht -


Emrichm2 - Do 16.11.17 11:33

Super ich probiere es gleich aus

Vielen Dank!


Delete - Do 16.11.17 11:52

- Nachträglich durch die Entwickler-Ecke gelöscht -


Emrichm2 - Do 16.11.17 11:57

Hallo Frühlingsroll und alle;

echt super es funktioniert ihr habt mir den tag gerettet.

Vielen,Vielen Dank!!


Delete - Do 16.11.17 12:08

- Nachträglich durch die Entwickler-Ecke gelöscht -