Hello,

> I asked this some days ago too, but there was no real solution besides
> hacking code of Xindice.
I see...ughhh...

> The <EquipmentTypes /> Tag, u have to set by yourself, cause u are
getting
> a resultset.
Ok, I already did it.

> the declaration can be killed by
> ----------------------------------------------
> data= data+xml.substring(xml.indexOf("?>")+2);
> -----------------------------------------------
> for the
>
> "xmlns:src="http://xml.apache.org/xindice/Query";
> src:col="/db/xmtrader/Recording/Equipment/EquipmentType" src:key="mic"
>
> stuff i found a really bad solution, it "overreads" just that stuff and
> gives the string back to u without it.
> ....
Thanks, I'll apply it, too.

> hope that helps
Sure it does. Thanks a lot.

Btw, when I get the resources list I would like to add it to a document.
This will be a document fragment, the method should return a DOM Node and
this one will be after that added to the root element I already created. I'm
trying the usual iterating through the ResourceSet and creating the fragment
in the method, but it is giving me an eception, something like 'DOM005 Wrong
document'. I do not know what's happening, any ideas? (code attached below).

Thanks a lot :-)

----------------
/**
 * Search for documents in the DB. If not found, return null.
 * The rootCollection is initialized in the constructor
 * I'm trying to return the fragment in xmldoc but it gives the exception
:-(
 */
public Node find(String subCol, String xpath) throws Exception {
 Collection col = null;
 Node xmldoc = null;
 try {
  Class c = Class.forName(driver);

  Database database = (Database) c.newInstance();
  DatabaseManager.registerDatabase(database);

  String localCol = rootCollection + subCol;

  col = DatabaseManager.getCollection(localCol);

  XPathQueryService service =
   (XPathQueryService) col.getService("XPathQueryService", "1.0");
  ResourceSet resultSet = service.query(xpath);
  ResourceIterator results = resultSet.getIterator();
  while (results.hasMoreResources()) {
   Resource res = results.nextResource();


System.out.println((((XMLResource)res).getContentAsDOM().getFirstChild()));
   if(xmldoc!=null) {
    Node childNode = ((XMLResource)res).getContentAsDOM().getFirstChild();
    xmldoc.appendChild(childNode);
   }
   else {
    xmldoc = ((XMLResource)res).getContentAsDOM().getFirstChild();
   }
  }
  return (xmldoc);
 }
 catch (XMLDBException e) {
  System.err.println("XML:DB - Find Exception occured " + e.errorCode);
  throw e;
 }
 finally {
  if (col != null) {
   col.close();
  }
 }
}


I'd like to invoke this method from this one:
/**
 * Inititializes a DOM Node to list the available Equipment types
 *
 */
public void initEquipmentTypes() {
 DOMImplementation impl;
 try {
  // Find the implementation
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  factory.setNamespaceAware(true);
  factory.setValidating ( false );
  DocumentBuilder builder = factory.newDocumentBuilder();
  impl = builder.getDOMImplementation();
 }
 catch (Exception ex) {
  throw new RuntimeException("Failed to initialize DOM factory. Root cause:
\n" + ex);
 }

 //Create the node for the root, 'Class'
 Document doc = impl.createDocument( null, "EquipmentTypes", null);
 equipmentTypes = doc.getDocumentElement();

 //find the Equipment Types available in the database
 String localSubCol =  "/Recording/Equipment/EquipmentType";
 try {
  //Here is where I create an instance and call the method above
  //result is not null but it gives an exception
  XindiceManager xi = new XindiceManager();
  Node result = xi.find(localSubCol, "//EquipmentType");

  if (result!=null) {
   equipmentTypes.appendChild(result);
  }
 }
 catch (Exception e) {
  System.err.println("Cannot get results from the DB: " + e.getMessage());
 }
}


Reply via email to