2017-01-11 4 views
1

Я загрузил файл XMLType из Oracle DB в приложение Java. Я подготовил класс для обработки операций на файле XML, который выглядит следующим образом:Изменение файла XMLType Java

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> 
+0

Является ли целью изменить XML и обновить базу данных с помощью этих изменений? Если да, зачем вообще использовать Java - просто измените XML в базе данных. – MT0

+0

Я знаю, что есть другие способы, такие как XPath или XQuery, но мне нужно изменить его внутри приложения с помощью DOM. – monterinio

ответ

0

Вы можете сделать все замены очень просто в SQL вы посылаете Oracle:

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

ok, но это подход xpath. как это сделать с помощью DOM? – monterinio

0

Я нашел решение. Существует способ setTextContent(), который должен использоваться вместо setNodeValue() .

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

updateXML устарел. Вы должны попытаться использовать средство XQUERY-UPDATE и операторов XMLQUERY.

Смежные вопросы