有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法将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) 个答案

  1. # 1 楼答案

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