2

まず第一に、この質問に少し時間を費やすつもりであるすべての人々に感謝します。

第二に、私の英語(私の第一言語ではありません!:D)をお詫びします。

さて、ここに私の問題があります。

私はAndroidを学んでおり、XMLファイルを使用して情報を保存するアプリを作成しています。ファイルの作成に問題はありませんが、XPathを使用してXMLタグを読み取ろうとすると(DOM、XMLPullParserなどで問題が発生するだけです)、少なくとも最初のタグを読み取ることができました。

コードを見てみましょう。

アプリが生成するXMLファイルは次のとおりです。

<dispositivo>
    <id>111</id>
    <nombre>Name</nombre>
    <intervalo>300</intervalo>
</dispositivo>

そして、これがXMLファイルを読み取る関数です。

private void leerXML() {
    try {
        XPathFactory  factory=XPathFactory.newInstance();
        XPath xPath=factory.newXPath();

        // Introducimos XML en memoria
        File xmlDocument = new File("/data/data/com.example.gps/files/devloc_cfg.xml");
        InputSource inputSource = new InputSource(new FileInputStream(xmlDocument));

        // Definimos expresiones para encontrar valor.
        XPathExpression  tag_id = xPath.compile("/dispositivo/id");
        String valor_id = tag_id.evaluate(inputSource);

        id=valor_id;

        XPathExpression  tag_nombre = xPath.compile("/dispositivo/nombre");
        String valor_nombre = tag_nombre.evaluate(inputSource);

        nombre=valor_nombre;
    } catch (Exception e) {
        e.printStackTrace();
    }
}

アプリはid値を正しく取得して画面に表示しますが(「id」変数と「nombre」変数はそれぞれTextViewに割り当てられています)、「nombre」は機能していません。

何を変更すればよいですか?:)

いつもお世話になっております。このサイトはとても役に立ちます!

PD:サイト全体で回答を探していましたが、見つかりませんでした。

4

2 に答える 2

2

同じ入力ストリームを2回使用していますが、2回目に使用するときは、すでにファイルの終わりにあります。ストリームをもう一度開くか、たとえばでバッファリングしてByteArrayInputStream再利用する必要があります。

あなたの場合、これを行う:

inputSource = new InputSource(new FileInputStream(xmlDocument));

この行の前

XPathExpression  tag_nombre = xPath.compile("/dispositivo/nombre");

役立つはずです。

ただし、ストリームを適切に閉じる必要があることに注意してください。

于 2012-11-26T23:10:39.157 に答える
0

問題は、stream-input-sourceを複数回再利用できないことです。最初の呼び出しでtag_id.evaluate(inputSource)は、入力が最後まで読み取られています。

1つの解決策は、事前にドキュメントを解析することです。

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
Document document = documentBuilderFactory.newDocumentBuilder().parse(inputSource);

Source source = new DOMSource(document);

// evalute xpath-expressions on the dom source
于 2012-11-26T23:12:03.870 に答える