从xml对象中按标记名称提取数据

时间:2017-02-12 13:52:26

标签: java android xml nullpointerexception

我试图使用xml标签从数据库中提取数据,但我不断收到此错误

'java.lang.String org.w3c.dom.Node.getNodeValue()' on a null object reference

在我尝试提取数据之前,当我记录字符串时,不确定为什么它说标记为null,看起来我应该相信它。

<?xml version="1.0" ?>
  <database>
    <account>
     <id>1</id>
     <fname>john</fname>
     <lname>smith</lname>
     <status>1</status>
   </account>
 </database>

这是我尝试从中提取数据的字符串的输出,这是我用来提取数据的代码。

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();;
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document dom = db.parse (new ByteArrayInputStream(s.getBytes()));
        Element docEle = dom.getDocumentElement ();

        NodeList nl = docEle.getElementsByTagName("account");

        Element entry = (Element)nl.item(0);
        Element id = (Element)entry.getElementsByTagName("id").item(0);
        Element fname= (Element)entry.getElementsByTagName("fname").item(0);
        Element lname = (Element)entry.getElementsByTagName("lname").item(0);
        Element status= (Element)entry.getElementsByTagName("status").item(0);

        user_id = id.getFirstChild().getNodeValue();
        user_fname = fname.getFirstChild().getNodeValue();
        user_lname = lname.getFirstChild().getNodeValue();
        user_status = status.getFirstChild().getNodeValue();

当应用尝试从第一个元素获取节点值时,应用程序崩溃,任何帮助都表示赞赏并提前感谢

2 个答案:

答案 0 :(得分:0)

您已启动&lt; account&gt;标签,但没有结束它。更改&lt; / user&gt;到&lt; / account&gt;

答案 1 :(得分:0)

管理好解决这个问题,这对任何有类似问题的人都有帮助。

能够从xml字符串中读取标记名称我执行了以下操作(s是xml字符串变量)

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

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();;
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document dom = db.parse(is);
            Element docEle = dom.getDocumentElement ();

            NodeList nl = docEle.getChildNodes();

            if (nl != null) {
                int length = nl.getLength();
                for (int i = 0; i < length; i++) {
                    if (nl.item(i).getNodeType() == Node.ELEMENT_NODE) {
                        Element el = (Element) nl.item(i);
                        if (el.getNodeName().contains("account")) {
                            user_id = el.getElementsByTagName("id").item(0).getTextContent();
                            user_fname = el.getElementsByTagName("fname").item(0).getTextContent();
                            user_lname = el.getElementsByTagName("lname").item(0).getTextContent();
                            user_status = el.getElementsByTagName("status").item(0).getTextContent();
                        }
                    }
                }
            }

user_变量具有xml标记值