Collection-Resolver registrieren

Sie können Implementierungen des Interface XCollectionResolver im XDynamicContext registrieren.

Vorgehensweise

Registrieren Sie einen Collection-Resolver beim dynamischen Kontext.

Die im XDynamicContext registrierte XCollectionResolver-Implementierung wird während der Ausführung verwendet, um die Gruppe der Knoten abzurufen, die dem in Aufrufen der Methode fn:collection angegebenen URI zugeordnet ist. Wenn im XDynamicContext kein Collection-Resolver registriert ist, führen Aufrufe von fn:collection zu einem behebbaren Fehler und als Gruppe wird die leere Sequenz verwendet.

Beachten Sie, dass der Collection-Resolver und die Funktion fn:collection nicht zur Auflösung von Dokument-URIs bestimmt sind. Für diesen Zweck sollten Sie den Quellen-Resolver und die Funktion fn:doc verwenden.

Beispiel

Das folgende Basisbeispiel zeigt die Verwendung eines Collection-Resolvers.
XFactory factory = XFactory.newInstance();

// XPath-Ausdruck erstellen
XPathExecutable executable = factory.prepareXPath("count(collection('typeA-typeB'))"
           
// Collection-Resolver im dynamischen Kontext registrieren
XCollectionResolver collectionResolver = new ACollectionResolver(factory);
XDynamicContext dynamicContext = factory.newDynamicContext();
dynamicContext.setCollectionResolver(collectionResolver);

// XPath-Ausdruck ausführen
XSequenceCursor cursor = executable.execute(dynamicContext);
Das folgende Basisbeispiel zeigt eine XCollectionResolver-Implementierung.
public class ACollectionResolver implements XCollectionResolver {
  
    private XFactory m_factory;
   
    public ACollectionResolver(XFactory factory) {
        m_factory = factory;
    }
   
    public XSequenceCursor getCollection(String uri, String base) {
       
        // Standardgruppe abrufen
        if (uri.equals("")) {
            return getCollection("default", base);
        }
       
        // Angeforderte Gruppe abrufen
        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;
     }
   
}

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_resolvers_collection
Dateiname:txml_resolvers_collection.html