繁体   English   中英

Java:解析XML文件的空值

[英]Java: Null values parsing XML file

我试图解析一个xml文件来设置我的数据库的连接。 但我只返回了空字符串。 请有人请检查我做错了什么?

java类(Dbconfig只是具有字符串详细信息的类)

public class XMLReader {

 public Dbconfig read(){

    Dbconfig conf = new Dbconfig();

    try {
        File file = new File("database.xml");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(file);
        doc.getDocumentElement().normalize();
        //System.out.println("Root element " + doc.getDocumentElement().getNodeName());
        NodeList nodeLst = doc.getElementsByTagName("database");


        Element element = (Element) nodeLst.item(0);
        NodeList url = element.getElementsByTagName("url");
        conf.url = url.item(0).toString();
        NodeList driver = element.getElementsByTagName("driver");
        conf.driver = driver.item(0).toString();
        NodeList username = element.getElementsByTagName("username");
        conf.username = username.item(0).toString();
        NodeList password = element.getElementsByTagName("password");
        conf.password = password.item(0).toString();

        System.out.format("####Printing XML configuration:%s %s %s %s \n",conf.url, conf.driver, conf.username, conf.password);


    } catch (Exception e) {
      e.printStackTrace();
    }
        return conf;
   }
}

XML文件(它应该只提供1个数据库的配置):

<?xml version="1.0" encoding="UTF-8"?>
<database>
    <url>jdbc:mysql://localhost:3306/db</url>
    <driver>com.mysql.jdbc.Driver</driver>
    <username>admin</username>
    <password>admin</password>
</database>

输出是:

####Printing XML configuration:[url: null] [driver: null] [username: null] [password: null] 

toString()方法不会返回您认为的结果。 使用getTextContent()代替。

改变这个:

NodeList url = element.getElementsByTagName("url");
conf.url = url.item(0).toString();
NodeList driver = element.getElementsByTagName("driver");
conf.driver = driver.item(0).toString();
NodeList username = element.getElementsByTagName("username");
conf.username = username.item(0).toString();
NodeList password = element.getElementsByTagName("password");
conf.password = password.item(0).toString();

对此:

NodeList url = element.getElementsByTagName("url");
conf.url = url.item(0).getTextContent();
NodeList driver = element.getElementsByTagName("driver");
conf.driver = driver.item(0).getTextContent();
NodeList username = element.getElementsByTagName("username");
conf.username = username.item(0).getTextContent();
NodeList password = element.getElementsByTagName("password");
conf.password = password.item(0).getTextContent();

作为旁注,您几乎可以肯定在这里重新发明了轮子。 根据您的框架,Web服务器,应用服务器等,您可能最好使用内置的数据库配置/连接管理工具。

将您的代码更改为

            Element database = (Element) doc.getElementsByTagName("database").item(0);
            String url = ((Element)database.getElementsByTagName("url").item(0)).getTextContent();
            String driver = ((Element)database.getElementsByTagName("driver").item(0)).getTextContent();
...

或制定方法

private static String getParameter(Element database, String paramName) {
    return ((Element)database.getElementsByTagName(paramName).item(0)).getTextContent();
}

改用getTextContent ,例如:

conf.url = url.item(0).getTextContent();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM