Enregistrement d'un programme de résolution de collection

Vous pouvez enregistrer une implémentation de l'interface XCollectionResolver dans le contexte dynamique (XDynamicContext).

Procédure

Enregistrement d'un programme de résolution de collection dans le contexte dynamique

L'implémentation de l'interface XCollectionResolver enregistrée dans l'objet XDynamicContext est utilisée pendant l'exécution pour récupérer la collection de noeuds associée à l'URI fourni dans les appels à la méthode fn:collection. Si aucun programme de résolution de collection n'est enregistré dans l'objet XDynamicContext, les appels à la méthode fn:collection déclenchent une erreur remédiable et une séquence vide est renvoyée à la place de la collection.

Notez que le programme de résolution de collection et la fonction fn:collection n'ont pas pour finalité de résoudre les URI de document. Il convient d'utiliser le programme de résolution de source et la fonction fn:doc pour cette fin.

Exemple

L'exemple suivant illustre comment utiliser un programme de résolution de collection.
XFactory factory = XFactory.newInstance();

// Prepare the XPath expression
XPathExecutable executable = factory.prepareXPath("count(collection('typeA-typeB'))"
           
// Register the collection resolver with the dynamic context
XCollectionResolver collectionResolver = new ACollectionResolver(factory);
XDynamicContext dynamicContext = factory.newDynamicContext();
dynamicContext.setCollectionResolver(collectionResolver);

// Execute the XPath expression
XSequenceCursor cursor = executable.execute(dynamicContext);
L'exemple suivant illustre comment utiliser une implémentation de l'interface XCollectionResolver.
public class ACollectionResolver implements XCollectionResolver {
  
    private XFactory m_factory;
   
    public ACollectionResolver(XFactory factory) {
        m_factory = factory;
    }
   
    public XSequenceCursor getCollection(String uri, String base) {
       
        // Get the default collection
        if (uri.equals("")) {
            return getCollection("default", base);
        }
       
        // Get the requested collection
        ArrayList<XItemView> list = new ArrayList<XItemView>();
        StringTokenizer tokenizer = new StringTokenizer(uri, "-");
          XSequenceCursor cursor = null;
          while (tokenizer.hasMoreTokens()) {
              String token = tokenizer.nextToken();
              XSequenceCursor temp = getNodes(new StreamSource("collections.xml"), "/doc/" + token);
              if (cursor == null) {
                  cursor = temp;
              } else {
                  cursor = cursor.append(temp);
              }
          }
        return cursor;
    }
   
     private XSequenceCursor getNodes(Source source, String expression) {
         XPathExecutable executable = m_factory.prepareXPath(expression);
         XSequenceCursor cursor = executable.execute(source);
         return cursor;
     }
   
}

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_resolvers_collection
Nom du fichier : txml_resolvers_collection.html