2012-09-27 5 views
6

Ich versuche, eine Konfigurationsdatei für einige appspezifische Elemente (z. B. API-Schlüssel) für mein WinRT-Experiment einzurichten.Lesen einer XML-Ressourcendatei in einer Javascript WinRT-App

Bis jetzt habe ich eine Datei "config.xml" zum Stamm meines Projekts hinzugefügt, in den Eigenschaften als Ressource markiert ... und dann stecke ich fest.

Jedes Beispiel, das ich finden kann, scheint sich mit JSON-Ressourcendateien zu befassen (die irgendwie durch Konventionen an Lokalisierung gebunden sind und nicht für allgemeine Konfig-Sachen geeignet zu sein scheinen?), Laden von Dateien von der Festplatte (was nicht funktioniert da Ressourcen in die .pri-Datei kompiliert werden) oder verwendet C#.

Also wie kann ich das in meiner Javascript/HTML5 App machen?

Mein letzter Versuch war:

var uri = new Windows.Foundation.Uri('ms-resource:///config'); 
var xml = Windows.ApplicationModel.Resources.ResourceLoader 
              .getStringForReference(uri); 

aber das funktioniert nicht und führt die folgende Ausnahme:

0x80073b1f - JavaScript runtime error: ResourceMap Not Found. 

Was bin ich?


Ich fühle mich wie ich bin immer näher:

var r = Windows.ApplicationModel.Resources.Core.ResourceManager 
       .current.mainResourceMap.lookup('Files/config.xml'); 
var candidates = r.resolveAll(); 
candidates[0].getValueAsFileAsync().done(readXml); 

Diese Datei Ressource findet, aber alle Kandidaten enthält die ursprüngliche absolute Pfad der Datei ist, so wirft getValueAsFileAsync() eine Ausnahme sagen: „Die System kann die angegebene Datei nicht finden. " (und der Rückruf readXml wird nicht aufgerufen).

So kann ich immer noch nicht auf die Inhalt dieser XML-Datei zu bekommen scheinen.

Antwort

3

Try this ...

var uri = new Windows.Foundation.Uri('ms-appx:///myFolder/myConfig.xml'); 
var file = Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri); 

Sie können nun die Datei, um die Daten zu analysieren, verwenden und zu handhaben, wie gebraucht.

+0

Vielen Dank für den Vorschlag, aber das funktioniert nur, wenn die Datei als "Inhalt" in den Eigenschaften markiert ist. Ich habe es als "Ressource" markiert, so dass es nicht mehr auf der Festplatte existiert. –