无法将XML加载到属性对象Java中
您好,我在Java中尝试将XML文件加载到Properties对象时遇到问题。这就是我想做的:
public class loadXML() {
private dbConn
public loadXML(Connection currConn) {
this.dbConn = currConn;
}
public Properties populateProperties() {
ResultSet rst;
Statement stmt;
Connection con;
Properties prop;
con = dbConn.getConnection();
stmt = conn.createStatement();
rst.executeQuery("SELECT xml_row FROM xml_table");
if (rst.next()) {
prop = new Properties();
/* Old Code */
System.out.println(((XMLType)rst.getObject("xml_row")).getStringVal()); // * Note 1
prop.loadFromXML(((XMLType)rst.getObject("xml_row")).getInputStream());
/* Old Code */
/* New Code */
// transform xml loaded from database into byte stream.
byte[] bytes = ((XMLType)rst.getObject("xml_row")).getDOM().toString().getBytes("UTF-8");
// Load stream into properties object
prop.loadFromXML(new ByteArrayInputStream(bytes));
/* New Code */
}
return prop;
}
}
以下是保存在数据库中的XML摘录:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="key-name">01234</entry>
<entry key="key-name">123456</entry>
</properties>
注1-这是系统的功能。出来println()显示在屏幕上:
XML提取
<?xml version="1.0" encoding="UTF-8" standalone='no'?>
<!DOCTYPE properties>
<!--Copyright 2006 Sun Microsystems, Inc. All rights reserved.-->
<!-- DTD for properties -->
<properties version="1.0">
<entry key="key-name">01234</entry>
<entry key="key-name">123456</entry>
</properties>
我注意到version属性被添加到元素属性中(但这并不真正困扰我),但问题是DTD的链接被删除(即系统“http://java.sun.com/dtd/properties.dtd”),这在执行以下代码行时触发了一个错误:
prop.loadFromXML(((XMLType)rst.getObject("xml_row")).getInputStream());
以下是错误:
爪哇。util。InvalidPropertiesFormatException:组织。xml。萨克斯。SAXParseException::XML-20149:(错误)已使用元素“属性”,但未声明
# 1 楼答案
在我看来,DTD至少已经添加了一部分。这两个注释行来自在系统URL中找到的原始DTD文件。但是缺少元素和属性声明。数据库驱动程序的ResultSet::getObject实现可能是。。说没有完全测试