【问题标题】:Java XMLType file modificationJava XMLType 文件修改
【发布时间】:2017-01-11 14:09:18
【问题描述】:

我将一个 XMLType 文件从 Oracle DB 加载到 Java 应用程序中。我准备了一个类来处理 XML 文件的操作,如下所示:

public class XMLDoc {
private OraclePreparedStatement stmt;
private ResultSet rset;
private OracleResultSet orset;
private Document xml_column;
private XMLType poxml;

public XMLDoc(Connection con, String Query) throws Exception {
    setStmt((OraclePreparedStatement)
            con.prepareStatement(Query));
    setRset(getStmt().executeQuery());
    setOrset((OracleResultSet) rset);
}}

在主程序中,我连接到数据库并将 XML 文件读入 xml_column:

Connection con = DriverManager.getConnection(host, username, password);
tables[5] = (new XMLDoc(con, "SELECT p.PENALITESXML FROM PENALITES p WHERE id_order='"+data.getIdOrder()+"'"));
while(tables[5].getOrset().next()) {
            tables[5].setPoxml(XMLType.createXML(tables[5].getOrset().getOPAQUE("PENALITESXML")));
            tables[5].setXml_column((Document)tables[5].getPoxml().getDocument());
            Element element = tables[5].getXml_column().getDocumentElement();}

现在,我想修改加载的 XML 文档,所以我执行:

tables[5].getXml_column().getElementsByTagName("ISPAID").item(0).getChildNodes().item(0).setNodeValue("Y");

但是文档没有更新。我做错了什么?

这就是 XML 文件的样子:

<PENALITES ID_ORDER="50000">
    <PENALTY_AMOUNT>100</PENALTY_AMOUNT>
    <ISPAID>N</ISPAID>
</PENALITIES> 

【问题讨论】:

  • 目的是改变 XML 并用这个改变更新数据库吗?如果是这样,为什么要使用 Java - 只需修改数据库中的 XML。
  • 我知道还有其他方法,例如 XPath 或 XQuery,但我需要在应用程序内部使用 DOM 对其进行修改。

标签: java xml database oracle xmltype


【解决方案1】:

您可以在发送给 Oracle 的 SQL 中非常简单地完成所有替换:

Connection con = DriverManager.getConnection(host, username, password);
tables[5] = new XMLDoc(
  con,
  "SELECT UPDATEXML( XMLType( PENALITESXML ), '/PENALTIES/ISPAID/text()', 'Y' ).getStringVal()"
  + " AS PENALTIESXML"
  + " FROM PENALITES"
  + " WHERE id_order='"+data.getIdOrder()+"'"
);

您还应该考虑在准备好的语句中使用绑定变量。

【讨论】:

  • 好的,但这是 xpath 方法。如何用 DOM 方法做到这一点?
【解决方案2】:

我找到了解决方案。 有一个方法setTextContent() 必须使用它来代替setNodeValue() .

tables[5].getXml_column().getElementsByTagName("ISPAID").item(0).getChildNodes().item(0).setTextContent("Y");

【讨论】:

    【解决方案3】:

    updateXML 已被弃用。您应该尝试使用 XQUERY-UPDATE 工具和 XMLQUERY 运算符

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      相关资源
      最近更新 更多