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() 有什么问题???

在此处输入图像描述

还有一个问题,我怎样才能像 Visual Studio 一样设置 Eclipse,如果有任何错误,它将中断源行文件中的行,而不是仅仅在调试窗口上打印出堆栈消息。

已更新 1. 我发现这篇文章: org.w3c.dom.Node 安卓版本低于 2.2 org.w3c.dom.Node 安卓版本低于 2.2

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 上是错误的)。

但我相信我的 XML 格式正确。谷歌后,发现很多解释。 https://www.google.com/search?q=xml+%23text

在此处输入图像描述

于 2012-07-10T15:37:19.663 回答
9

使用 getTextContent() 方法。

node.getTextContent()

getTextContent() 方法返回所有嵌套标签的文本。

于 2012-07-10T14:01:46.610 回答
2

文本只是节点的子节点。您需要遍历 GeoPoint 节点的所有子节点,检查节点类型为 Node.TEXT_NODE 并连接文本

于 2012-07-10T14:10:03.783 回答