您好,我在尝试将XML文件加载到Java中的属性对象时遇到问题。这就是我想要做的事情:
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 - 这是System.out.println()在屏幕上显示的内容:
XML Extract
<?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>
我注意到版本属性被添加到元素属性(但这并没有真正打扰我),但问题是删除了DTD的链接(即SYSTEM“http://java.sun.com/dtd/properties.dtd”)在执行以下代码行时触发错误:
prop.loadFromXML(((XMLType)rst.getObject("xml_row")).getInputStream());
以下是错误:
java.util.InvalidPropertiesFormatException:org.xml.sax.SAXParseException :: XML-20149 :(错误)元素'属性'已使用但未声明。
答案 0 :(得分:0)
对我来说,看起来至少部分添加了DTD。两条注释行来自系统URL中找到的原始DTD文件。但缺少元素和属性声明。也许数据库驱动程序中的ResultSet :: getObject实现是......说..没有完全测试。