0
嗨我在嘗試將XML文件加載到Java中的屬性對象時遇到問題。這就是我要做的:無法將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"></entry>
<entry key="key-name">123456</entry>
</properties>
注1 - 這是什麼的System.out.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"></entry>
<entry key="key-name">123456</entry>
</properties>
在哪裏我注意到,版本屬性添加到的Elemen牛逼屬性(但並沒有真正困擾我),但問題是,鏈接到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:(錯誤)使用但未聲明元素'屬性'。
我設法找到了這個問題。 Java代碼中沒有錯。我正在使用Oracle 10g數據庫,xml_table中的xml_row被聲明爲XML類型。從數據庫中檢索時,Oracle 10g自動嘗試驗證存儲在xml_row中的XML數據是否與DTD相對。在我的情況下,數據庫服務器安裝在沒有訪問互聯網的機器上,這引發了錯誤。我所做的是將行類型更改爲CLOB。 – 2010-09-10 13:16:56