2

私は小さなテストAndroidアプリで基本的なxmlファイルを解析しようと戦ってきました。

私が持っているコードは次のとおりです。

InputStream is = getResources().openRawResource(R.xml.content);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
try {
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
      Document doc = dBuilder.parse(is,"UTF-8"); //Blows up right here.
      // Bunch more stuff here
}

私のxmlは次のようになります。

<?xml version="1.0" ?>
<main>
    <background>
        <defintion>This is a test</defintion>
    </background>
</main>

問題は、これを解析しようとするとorg.xml.sax.SAXParseException: Unexpected token (position:TEXT unprintable characters here ...@3:252 in java.io.InputStreamReader@411f3898)エラーが発生することです。私はグーグルで検索しましたが、見つけた他のすべてのソリューションは機能していないようです。

ファイルがUTF-8であることを再確認し、メモ帳++を使用してUTF-16とUTF-8の間でエンコードを変更し(BOMの有無にかかわらず試行)、これを適切に反映するようにプログラムを更新しましたが、私はそうします、私はいつもこのエラーを受け取ります。私は非常に明白な何かを見逃しているに違いないと確信していますが、どのような一連の組み合わせを試しても、これは常に失敗します。

4

2 に答える 2

1

最初にcontent.xmlファイルをres/rawフォルダーに置き、次にそれを次のように解析します。

xmlファイルres/raw / content.xml

<?xml version="1.0" encoding="utf-8"?>
<main>
    <background>
        <defintion>This is a test</defintion>
    </background>
</main>

そしてそれを次のように解析します:

  InputStream is = getResources().openRawResource(R.raw.content);
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder dBuilder;
            try {
                dBuilder = dbFactory.newDocumentBuilder();
                try {
                    Document doc = dBuilder.parse(is,"UTF-8");
                    NodeList nl = doc.getElementsByTagName("main");

                    System.out.println("NodeList NodeList"+nl.getLength());

                } catch (SAXException e) {
                    // TODO Auto-generated catch block

                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } //Blows up right here.
            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
于 2012-10-17T05:08:41.403 に答える
1

私はあなたと同じ問題に遭遇しました。私はついに解決策を見つけました:

xmlをres/xmlに入れないでください。xmlファイルはandroidsdkによってエンコードされるため、正しく読み取ることができません。ただし、res / rawに配置すると、アプリにエクスポートされたxmlファイルはそのまま残ります。

于 2013-04-16T12:25:43.617 に答える