Kaskadierung

Status
Nicht offen für weitere Antworten.
K

Kidaoo

Gast
Hallo!

Wie funktioniert genau die Kaskadierung und wie kaskadiert man die Konstruktoren?

Ich beschäftige mich gerade mit XML und da habe ich einige Parser ausgetestet. Was mich genau interessiert ist der Unterschid zwischen dem kXML- und dem JDOM-Parser. Beider haben die .getChild()-Methode, doch bei JDOM kann man diese kaskadieren, das heißt wenn ich in meiner XML 3 Level habe, kann ich zB durch root.getChild("Level1").getChild("Level2").getChild("Level3")
auf die unterste Ebene gelangen. Bei kXML funktioniert es nicht. Da muss man wie folgt vorgehen:
root = doc.getRoot(); child = root.getChild(1); child_of_child = child.getChild(2)
... usw.

Hier sind die Beiden Methoden:

JDOM:
Code:
public Element getChild(String name, Namespace ns) {

        List elements = content.getView(new ElementFilter(name, ns));

        Iterator i = elements.iterator();

        if (i.hasNext()) {

            return (Element) i.next();

        }

        return null;

    }

kXML:
Code:
public Object getChild(int index) {
        return children.elementAt(index);
    }


Was ist für die mögliche Kaskadierung bei JDOM verantwortlich?

MfG
Kidao
 
K

Kidaoo

Gast
Code:
    /**

     * This returns the first child element within this element with the

     * given local name and belonging to the given namespace.

     * If no elements exist for the specified name and namespace, null is

     * returned.

     *

     * @param name local name of child element to match

     * @param ns <code>Namespace</code> to search within

     * @return the first matching child element, or null if not found

     */

    public Element getChild(String name, Namespace ns) {

        List elements = content.getView(new ElementFilter(name, ns));

        Iterator i = elements.iterator();

        if (i.hasNext()) {

            return (Element) i.next();

        }

        return null;

    }



    /**

     * This returns the first child element within this element with the

     * given local name and belonging to no namespace.

     * If no elements exist for the specified name and namespace, null is

     * returned.

     *

     * @param name local name of child element to match

     * @return the first matching child element, or null if not found

     */

    public Element getChild(String name) {

        return getChild(name, Namespace.NO_NAMESPACE);

    }
 
G

Guest

Gast
Kidaoo hat gesagt.:
...Was ist für die mögliche Kaskadierung bei JDOM verantwortlich?...
Gemeinsame Schnittstelle. Jedes Element kann untergeordnete Elemente gleichen Typs enthalten.
 

Marco13

Top Contributor
root = doc.getRoot(); child = root.getChild(1); child_of_child = child.getChild(2)
Das wird wohl auch nicht funktionieren. Da fehlen m.E. noch casts. Und das ist auch der Grund für den Unterschied: Die erste Methode liefert ein "Element". Das hat eine getChild()-Methode. Die zweite Methode liefert ein Object. Das hat erstmal keine getChild-Methode, außer, wenn man es auf "Element" castet.
 
G

Guest

Gast
Ja, das mit casten ist mir klar aber auch so kann man es leider nicht kaskadieren.
 

ToKaM OnE

Aktives Mitglied
konstruktoren kaskadiert man, indem man verschiedene konstruktoren mit verschiedenen übergabeparametern schreibt.
Je nach übergabe Parameter werden andere operationen ausgefürt. Damit keine code dopplungen entsehen kann man angenommen man hat 3 kostruktoren, dem ersten wird ein string übergeben, dem zweiten ein int und dem 3. ein string und ein int, so kann man im 3 konstruktor den 1 und 2 mit den jeweiligen übergabeparametern aufrufen.

Das geht mit dem Schlüsselwort this.

this() in einem konstruktor ruft den standartkonstruktor der Klasse auf. Man kann auch die entsprechenden übergabe Parameter in die Klammern schreiben. super() ruft den Konstruktor der Vaterklasse auf.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben