Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从xml对象中按标记名提取数据_Java_Android_Xml_Nullpointerexception - Fatal编程技术网

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

Java 从xml对象中按标记名提取数据,java,android,xml,nullpointerexception,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</i

我试图使用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>

应用程序在尝试从第一个元素获取节点值时崩溃,感谢您的帮助,并提前感谢您启动了标记,但没有结束标记。更改为

成功地解决了这个问题,我希望这对任何有类似问题的人都会有所帮助

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

InputSource is=new InputSource();
is.setCharacterStream(新的StringReader);
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();;
DocumentBuilder db=dbf.newDocumentBuilder();
文档dom=db.parse(is);
Element docEle=dom.getDocumentElement();
NodeList nl=docEle.getChildNodes();
如果(nl!=null){
int length=nl.getLength();
for(int i=0;i

用户变量具有xml标记值

上面的代码很可能存在细微错误。如果默认的
file.encoding
不是UTF-8(在Windows上是Cp1252),
s.getBytes()
将返回一个Windows-1252数据数组,但由于XML没有声明编码,它将默认为UTF-8。代码点127以上的任何字符都将被乱码,或者解析将失败。永远不要调用没有
字符集的
getBytes()
重载。使用
s.getBytes(StandardCharsets.UTF_8)
。您好,我添加了您建议的代码,但应用程序仍在崩溃,我连接到的服务器基于linux,如果这有区别的话。哪一个出现
null
?可能重复的你应该学习。这比在这里问要有效得多。我确实纠正了那个错误,但没有成功difference@AndrewDean你的代码甚至没有编译。没有
radius
loc
变量。如果您需要真正的帮助,请发布您的真实代码。@DavidConrad我很抱歉,作为赋值的一部分,我更改了一些变量名,但已在帖子中更正了它们。
        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();
            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();
                        }
                    }
                }
            }