Java 从xml对象中按标记名提取数据
我试图使用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
'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();
}
}
}
}