首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java XMLType文件修改

Java XMLType文件修改
EN

Stack Overflow用户
提问于 2017-01-11 22:09:19
回答 3查看 54关注 0票数 1

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

代码语言:javascript
复制
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中:

代码语言:javascript
复制
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文档,所以我执行:

代码语言:javascript
复制
tables[5].getXml_column().getElementsByTagName("ISPAID").item(0).getChildNodes().item(0).setNodeValue("Y");

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

这是XML文件的外观:

代码语言:javascript
复制
<PENALITES ID_ORDER="50000">
    <PENALTY_AMOUNT>100</PENALTY_AMOUNT>
    <ISPAID>N</ISPAID>
</PENALITIES> 
EN

回答 3

Stack Overflow用户

发布于 2017-01-11 22:33:56

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

代码语言:javascript
复制
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()+"'"
);

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

票数 0
EN

Stack Overflow用户

发布于 2017-01-11 23:06:04

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

代码语言:javascript
复制
tables[5].getXml_column().getElementsByTagName("ISPAID").item(0).getChildNodes().item(0).setTextContent("Y");
票数 0
EN

Stack Overflow用户

发布于 2017-01-12 12:23:32

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41593092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档