Navigation mit XTreeCursor

Für die Anzeige Ihrer Daten können Sie das Interface XTreeCursor verwenden.

Informationen zu diesem Vorgang

Angenommen, die Sequenz, die sich bei Auswertung eines XPath- oder XQuery-Ausdrucks bzw. eines XSLT-Style-Sheets ergibt, enthält Knoten. In dem Fall ist es für Sie sehr komfortabel, wenn Sie für den Zugriff auf den Inhalt dieser Knoten weitere XPath- oder XQuery-Ausdrücke auf die Knoten anwenden können. Sie können aber auch direkt mit der API XML durch die Baumstruktur eines Knotens navigieren.

Vorgehensweise

Beispiel

Das folgende Beispiel zeigt, wie Sie mit den Methoden des Interface XTreeCursor durch die Baumstruktur mit Ihren XML-Daten navigieren können.

/* Inhalt von library.xml

<library>
  <book title='Ulysses'><author><first>James</first><last>Joyce</last></author></book>
  <book title='Ada'><author><first>Vladimir</first><last>Nabokov</last></author></book>
</library>
*/

XItemFactory factory = XFactory.newInstance().getItemFactory();
XItemView item = factory.item(new StreamSource("library.xml"));

// 'tree' befindet sich anfänglich in demselben Knoten wie
// 'item', d. h. im Dokumentknoten der Eingabe.
XTreeCursor tree = item.getTreeCursor();

// Cursor tree auf Element "library" setzen
tree.toFirstChild();

// Cursor tree auf Textknoten mit Leerraum setzen
tree.toFirstChild();

// Auf erstes Element "book" setzen
tree.toNextSibling();

// Auf Textknoten mit Leerraum setzen
tree.toNextSibling();

// Auf zweites Element "book" setzen
tree.toNextSibling();

// Zweite Instanz von XTreeCursor erstellen, die zunächst auf
// denselben Knoten wie 'tree' gesetzt wird, d. h. auf das
// zweite Element "book"
XTreeCursor secondBook = tree.getTreeCursor();

// 'tree' auf Element "library" setzen
tree.toParent();

// 'secondBook' auf Attribut "title" setzen
secondBook.toFirstAttribute();

Das folgende Beispiel zeigt die Navigation durch alle Knoten in einer Baumstruktur mit Tiefensuche.

XItemFactory factory = XFactory.newInstance().getItemFactory();
XItemView item = factory.item(new StreamSource("library.xml"));

XTreeCursor tree = item.getTreeCursor();
boolean hasMoreNodes = true;

do {
    // Aktuellen Knoten verarbeiten

    if (tree.toFirstAttribute()) {
        do {
            // Process attributes
        } while (tree.toNextAttribute());
        tree.toParent();
    }

    if (tree.toFirstNamespace()) {
        do {
            // Namespaces verarbeiten
        } while (tree.toFirstNamespace());
        tree.toParent();
    }

    boolean foundNext = false;

    // Als Nächstes auf aktuellen Knoten zugreifen, wenn dieser ein untergeordnetes Element hat.
    // Andernfalls auf nächstes gleichgeordnetes Element zugreifen.
    if (tree.toFirstChild() || tree.toNextSibling()) {
        foundNext = true;

    // Wenn kein untergeordnetes und kein gleichgeordnetes Element vorhanden ist,
    // das gleichgeordnete Element eines Vorgängerelements suchen
    } else {
        do {
            hasMoreNodes = tree.toParent();
            if (hasMoreNodes) {
                foundNext = tree.toNextSibling();
            }
        } while (hasMoreNodes && !foundNext);
    }
} while (hasMoreNodes);

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_nav_xtree
Dateiname:txml_nav_xtree.html