无法将XML加载到Properties Object Java中

时间:2010-07-08 11:53:00

标签: java xml

您好,我在尝试将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 :(错误)元素'属性'已使用但未声明。

1 个答案:

答案 0 :(得分:0)

对我来说,看起来至少部分添加了DTD。两条注释行来自系统URL中找到的原始DTD文件。但缺少元素和属性声明。也许数据库驱动程序中的ResultSet :: getObject实现是......说..没有完全测试。