Re: Change a DOM value and save to database

Yan Langlois <[email protected]>
Newsgroups gmane.text.xml.xindice.user
Message-ID <[email protected]>
Hi,

In my last project with Xindice I had to insert/remove/update nodes 
directly on the database. I used XUpdate to do it. Here I think you 
should generate an XUpdate query to save the modifications. See 
http://xml.apache.org/xindice/1.0/guide-developer.html#Using+XUpdate+to+Modify+the+Database 
for more information.

Yan.

Tadej Lasic wrote:

> Hi,
>
> I have a question about Xindice and DOM node value manipulation. My 
> program
> needs to read an XML document from the database, read the elements and 
> text
> values and allow the user to change text values and then save the XML
> document with the changed values back into the database while maintaining
> the structure. I'm using Xindice 1.0 and J2SE 1.4.2.
>
> Now, I can open and read a DOM document with Xindice using the
> getContentAsDOM() method and traverse it with NodeIterator, but I 
> don't know
> how I could manipulate a certain Node.TEXT value and than store the whole
> XML document into the database without changing the structure or any 
> of the other values. Here's some code:
>
> public class Xindice {
>    static Node node;
>
>    public static void main(String[] args) throws Exception {
>        Collection col = null;
>
>        try {
>            String driver = 
> "org.apache.xindice.client.xmldb.DatabaseImpl";
>            Class c = Class.forName(driver);
>
>            Database database = (Database) c.newInstance();
>            DatabaseManager.registerDatabase(database);
>            col =
>                    DatabaseManager.getCollection(
>                            "xmldb:xindice:///db/addressbook");
>
>            XMLResource document = (XMLResource) 
> col.getResource("address");
>
>            if (document != null) {
>                // Create the NodeIterator
>
>                DocumentTraversal traversable = (DocumentTraversal)
> document.
>                                                getContentAsDOM();
>                NodeIterator iterator = traversable.createNodeIterator(
>                        document.getContentAsDOM(), NodeFilter.SHOW_ALL,
> null, true);
>
>                while ((node = iterator.nextNode()) != null) {
>
>                    switch (node.getNodeType()) {
>
>                    case Node.TEXT_NODE:
>                        if (!node.getNodeValue().trim().equals("")) {
>
>                            node.setNodeValue("test");
>                            
> System.out.println(node.getNodeValue().trim());
>
>                        }
>                        break;
>
>                    }
>
>                } //while
>
>            } else {
>                System.out.println("Document not found");
>            }
>        } catch (XMLDBException e) {
>            System.err.println("XML:DB Exception occured " + e.errorCode);
>        } finally {
>            if (col != null) {
>                col.close();
>            }
>        }
>    }
>
> }
>
> As you can I try to set a new value using node.setNodeValue("test") but I
> don't know how to get the changed DOM tree into the database. Any help 
> would
> be very appreciating.
>
> Regards,
>        Tadej
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.