# XML-Datei in Resources per XmlReader lesen



## krgewb (17. Apr 2017)

Es geht um C# !

Ich will es wie in dem Tutorial machen: http://csharp.net-tutorials.com/xml/reading-xml-with-the-xmlreader-class/
Ich will allerdings keinen Pfad angeben müssen sondern per Resourcen.dateiname.xml ansprechen können.
Ich habe bereits bei stackoverflow ( http://stackoverflow.com/questions/43443105/reading-xml-file-from-resources-with-the-xmlreader-class ) gefragt aber da wurde ich nur heruntergevotet.


----------



## Flown (17. Apr 2017)

krgewb hat gesagt.:


> Ich will allerdings keinen Pfad angeben müssen sondern per Resourcen.dateiname.xml ansprechen können.


Was? Auf SO hast du auch ein Closevote wegen "Unclear what are you asking" und genau deshalb bekommst du keine Antwort.


----------



## krgewb (18. Apr 2017)

resources.resx ist etwas C#-spezifisches. Da kann man Links auf Dateien hinterlegen. Diese Bilder sind dann in der EXE-Datei drin und müssen nicht separat geliefert werden.

Meine Bild-Datei für eine Textur heißt z.B. 001e.png
Ich kann es dann wie folgt schreiben:

```
Texture meineTextur = TextureLoader.FromBitmap(Resourcen._001e);
```


----------



## Flown (18. Apr 2017)

Ich weiß was resources sind. Das Konzept ist nich C# spezifisch. Meine Frage war eigentlich, wo dein Problem liegt.


----------



## krgewb (18. Apr 2017)

Bisher habe ich es folgendermaßen gemacht:

```
XmlReader xmlReader = XmlReader.Create(@"C:\Users\Erich\Desktop\Erich_AD\CG\Examples\Test_001_Schranke\Resources\level01.xml");
```

Ich habe level01.xml hinzugefügt. Nun möchte ich es wie folgt machen:
XmlReader xmlReader = XmlReader.Create(Resourcen.level01);

Besagte Zeile führt jedoch zu einer Exception.

An unhandled exception of type 'System.ArgumentException' occurred in mscorlib.dll

Additional information: Illegales Zeichen im Pfad.


```
bei System.IO.Path.LegacyNormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   bei System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   bei System.IO.Path.GetFullPathInternal(String path)
   bei System.Xml.XmlResolver.ResolveUri(Uri baseUri, String relativeUri)
   bei System.Xml.XmlUrlResolver.ResolveUri(Uri baseUri, String relativeUri)
   bei System.Xml.XmlTextReaderImpl..ctor(String uriStr, XmlReaderSettings settings, XmlParserContext context, XmlResolver uriResolver)
   bei System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext)
   bei System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings, XmlParserContext inputContext)
   bei System.Xml.XmlReader.Create(String inputUri)
   bei Example.MyApplication.GameWindow_KeyDown(Object sender, KeyboardKeyEventArgs e) in C:\Users\Erich\Desktop\Erich_AD\CG\Examples\Test_001_Schranke\Program.cs:Zeile 677.
   bei System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   bei OpenTK.NativeWindow.OnKeyDown(KeyboardKeyEventArgs e)
   bei OpenTK.NativeWindow.OnKeyDownInternal(Object sender, KeyboardKeyEventArgs e)
   bei System.EventHandler`1.Invoke(Object sender, TEventArgs e)
   bei OpenTK.Platform.NativeWindowBase.OnKeyDown(Key key, Boolean repeat)
   bei OpenTK.Platform.Windows.WinGLNative.HandleKeyboard(IntPtr handle, WindowMessage message, IntPtr wParam, IntPtr lParam)
   bei OpenTK.Platform.Windows.WinGLNative.WindowProcedure(IntPtr handle, WindowMessage message, IntPtr wParam, IntPtr lParam)
   bei OpenTK.Platform.Windows.Functions.DispatchMessage(MSG& msg)
   bei OpenTK.Platform.Windows.WinGLNative.ProcessEvents()
   bei OpenTK.NativeWindow.ProcessEvents(Boolean retainEvents)
   bei OpenTK.GameWindow.Run(Double updates_per_second, Double frames_per_second)
   bei OpenTK.GameWindow.Run()
   bei Example.MyApplication.Main() in C:\Users\Erich\Desktop\Erich_AD\CG\Examples\Test_001_Schranke\Program.cs:Zeile 77.
   bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   bei System.Threading.ThreadHelper.ThreadStart()
```


----------



## Flown (18. Apr 2017)

Naja vielleicht musst du auch deine Strings in deiner resource escapen?


----------



## krgewb (18. Apr 2017)

Wie meinst du das?

Aufgrund von "Additional information: Illegales Zeichen im Pfad." 
habe ich jetzt alles umgebaut sodass die Datei dort liegt:
`C:\Users\Erich\Desktop\T\CG\Examples\X\Resources\L.xml`
Jetzt sind da keine Unterstriche und keine Ziffern.
Die Exception kommt aber weiterhin.


----------



## krgewb (18. Apr 2017)

Das würde funktionieren:
Der XML-Text ist in der Text-Datei level01*.txt*
Und dann:

```
XmlReader xmlReader = XmlReader.Create(new StringReader(Resourcen.level01));
```


----------



## krgewb (30. Jun 2017)

Ich mache es jetzt so wie ich es in meinem vorherigen Beitrag beschrieben habe. Syntax-Highlighting in Notepad++ funktioniert sogar.


----------

