簡體   English   中英

Android:將XML從原始文件夾轉換為字符串

[英]Android: Converting an XML from the raw folder to string

我遇到了一個讓我瘋狂的問題xD ......(首先:大家好!由於某些原因,我無法在編輯開頭的帖子開頭加上“Hello everyone”...)

用例如下:我有一個xml文件存儲在我項目的原始文件夾中。 xml文件看起來像這樣:

<myxml ....>Some text<innerelement ... /></myxml>

我知道有一個名為xml的文件夾,但我需要的是一個字符串 - 而不是XmlResourceParser(調用context.getResources()。getXml(id)時得到的)。

現在,我要加載這個原始xml文件的方法是:

context.getResources().openRawResource(R.raw.myfile)

這會返回一個InputStream,然后我嘗試使用以下代碼轉換為String:

try {
   byte[] buffer = new byte[stream.available()];
   stream.read(buffer);
   stream.close();
   return new String(buffer);
} catch (IOException e) {
   // Error handling
}

如果我現在將生成的String打印到logcat,我得到的就是一堆正方形,分布在幾行上。

所以我想我必須在那里遺漏一些東西......我嘗試了幾種將這個輸入流轉換為String的方法,所有這些方法都得到了相同的結果(見上圖)...

在此先感謝和最誠摯的問候,

zainodis

更新12.11.2011

我嘗試使用擴展名.txt而不是.xml將xml文件保存在原始文件夾中。 現在轉換失敗,出現OutOfMemory異常oO。 我嘗試了使用此線程的建議轉換數據的不同方法 - 所有這些都導致OutOfMemoryException:

11-12 06:09:22.671: I/TestRunner(652): java.lang.OutOfMemoryError
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.expandBuffer(Scanner.java:2183)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.readMore(Scanner.java:2143)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.findPostDelimiter(Scanner.java:2121)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.setTokenRegion(Scanner.java:2031)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.next(Scanner.java:1017)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.next(Scanner.java:993)
11-12 06:09:22.671: I/TestRunner(652):  at de.softcon.mobileapp.framework.core.configuration.utility.StringUtils.InputStreamToString(StringUtils.java:69)
11-12 06:09:22.671: I/TestRunner(652):  at de.softcon.mobileoffences.domainmodel.serialization.test.CorpusDelictiFactoryTest.testSerialization(CorpusDelictiFactoryTest.java:32)
11-12 06:09:22.671: I/TestRunner(652):  at java.lang.reflect.Method.invokeNative(Native Method)
11-12 06:09:22.671: I/TestRunner(652):  at java.lang.reflect.Method.invoke(Method.java:507)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestCase.runTest(TestCase.java:154)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestCase.runBare(TestCase.java:127)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestResult$1.protect(TestResult.java:106)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestResult.runProtected(TestResult.java:124)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestResult.run(TestResult.java:109)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestCase.run(TestCase.java:118)
11-12 06:09:22.671: I/TestRunner(652):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
11-12 06:09:22.671: I/TestRunner(652):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
11-12 06:09:22.671: I/TestRunner(652):  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
11-12 06:09:22.671: I/TestRunner(652):  at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)

我將此代碼放在onCreate(...) 它可以在xml文件中顯示該字符串。

InputStream stream = getResources().openRawResource(R.raw.data);
try {
        byte[] buffer = new byte[stream.available()];
        stream.read(buffer);
        stream.close();
        Log.i("xml", new String(buffer));
} catch (IOException e) {
    // Error handling
}

我不確定你是否還在尋找解決方案,但是如果你或其他任何人想要解決這個問題,我就是這樣做的,並讓它起作用。 我完全使用了@wannik所做的,但指定了我想要使用的charsetName。 所以我的代碼看起來像這樣:

InputStream stream = getResources().openRawResource(R.raw.data);
try {
    byte[] buffer = new byte[stream.available()];
    stream.read(buffer);        
    stream.close();
    String xml = new String(buffer, "UTF-8");      // you just need to specify the charsetName   
} catch (IOException e) {
    // Error handling
}

希望這可以幫助。

根據您的描述判斷,放置在原始文件夾中的XML文件似乎在打包之前編譯為與其余XML文件一樣。 我沒有嘗試過,所以我不能肯定地說。 也許您可以嘗試將XML文件重命名為.txt擴展名,然后再讀取它。 因為你只需要它作為一個字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM