4

私は Android 開発に不慣れで、XML を解析して Google MapView にバインドしたいと考えています。ただし、要素間のテキストを読み取ることはできません。

XML

    <?xml version="1.0" encoding="utf8"?>
    <table name="clinicaddress">
        <row>
            <GeoPoint>22.3852860,113.9664120</GeoPoint>
        </row>
        <row>
            <GeoPoint>22.336950,114.1578720</GeoPoint>
        </row>
    </table>

コード:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

try {
            inputStream = assetManager.open("clinics.xml");
            String xmlRecords = readTextFile(inputStream);
            //Log.e("Clinics XML", xmlRecords);

            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xmlRecords));

            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            Document doc = docBuilder.parse(is);

            doc.getDocumentElement ().normalize ();

            NodeList listOfClinics = doc.getElementsByTagName("row");
            Log.e("listOfClinics Length" , String.valueOf(listOfClinics.getLength()));

            //Loop the XML

            for (int x = 0; x < listOfClinics.getLength(); x++) {
                Node ClinicNode = listOfClinics.item(x);
                NodeList ClinicInfo = ClinicNode.getChildNodes();
                for (int y = 0; y < ClinicInfo.getLength(); y++) {
                    Node info = ClinicInfo.item(y);
                    Log.e(info.getNodeName() , info.getNodeValue()); //<--Error on info.getNodeValue()
                }
}
            //End Loop XML
        } catch (Exception e) {
            Log.e("tag", e.getMessage());
        }

では、getNodeValue() の何が問題なのか???

ここに画像の説明を入力

もう 1 つの質問です。Eclipse を Visual Studio のように設定するにはどうすればよいですか。エラーが発生した場合、デバッグ ウィンドウにスタック メッセージを出力するだけでなく、ソース行ファイルの行に分割されます。

更新 1. 次の投稿を見つけました: Android バージョン 2.2 未満の org.w3c.dom.Node Android バージョン2.2 未満の org.w3c.dom.Node

node.getTextContext() は、node.getFirstChild().getNodeValue() と同じです。

ただし、これを試してみると、エラーも発生します。

4

3 に答える 3

13

最後に、私はこの作品を手に入れました。

私が使うinfo.getFirstChild().getNodeValue()

        for (int y = 0; y < ClinicInfo.getLength(); y++) {
            Node info = ClinicInfo.item(y);
            if (info.hasChildNodes()) {
                Log.e(info.getNodeName(), info.getFirstChild().getNodeValue());
            }
        }

3行目は重要です。hasChildNodes()をログに記録してLogCatで監視しますが、「#text」という名前のノードが含まれ、子ノードが含まれていない理由がわかりません(logcatではfalseです)。

しかし、私のXMLは正しい形式だと思います。グーグルの後、多くの説明を見つけました。 https://www.google.com/search?q=xml+%23text

ここに画像の説明を入力してください

于 2012-07-10T15:37:19.663 に答える
2

テキストはノードの単なる子です。GeoPoint ノードのすべての子をループし、ノード タイプが Node.TEXT_NODE であることを確認して、テキストを連結する必要があります。

于 2012-07-10T14:10:03.783 に答える