Gegeben sei folgende Schnittstelle, die Sie in dieser Aufgabe implementieren sollen.
package name.panitz.util.xml;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.w3c.dom.Node;
public interface DOMUtil {
boolean containsTag(Node n,String tagname);
boolean containsTag2(Node n,String tagname);
void collectTagnames(Node n, Set<String> result);
void collectTagnames2(Node n, Set<String> result);
void collectText(Node n,StringBuffer result);
void collectText2(Node n,StringBuffer result);
long getMaxWIDTHAttributeValue(Node n);
long height(Node n);
long height2(Node n);
default String text(Node n){
StringBuffer result = new StringBuffer();
collectText(n, result);
return result.toString();
}
default String text2(Node n){
StringBuffer result = new StringBuffer();
collectText2(n, result);
return result.toString();
}
default Set<String> collectTagnames(Node n){
Set<String> result = ConcurrentHashMap.newKeySet();
collectTagnames(n,result);
return result;
}
default Set<String> collectTagnames2(Node n){
Set<String> result = ConcurrentHashMap.newKeySet();
collectTagnames2(n,result);
return result;
}
}
Zusätzlich sei die Klasse NodelistSpliterator gegeben, die Sie in der letzten Aufgabe implementiert haben.
Implementieren Sie die abstrakten Methoden nach folgender Spezifikation:
long height(Node n)
:es soll die maximale Pfadlänge von der Wurzel bis zu einem Blatt berechnet werden. Ein Dokument, das nur aus einem Knoten besteht, hat dabei die Länge 1.
- long height2(Node n);: Wie height, nur sollen Sie jetzt einen
NodelistSpliterator
zum Verarbeiten der Kinder mit der Methode reduce verwenden.
- void collectText(Node n, StringBuffer result): Alle Texte von Textknoten des Dokuments
n
sollen dem StringBuffer angehängt werden und das in der Dokumentenreihenfolge. Sie dürfen dabei nicht die DOM-Methode getTextContent()
verwenden.
- void collectText2(Node n, StringBuffer result): Wie
collectText
, jetzt sollen Sie aber einen NodelistSpliterator
und die Methode forEach
zum Verarbeiten der Kinder verwenden.
- boolean containsTag(Node n, String tagname): Die Methode soll genau dann true ergeben, wenn ein Element mit dem übergebenen Tagnamen im Dokument existiert.
- boolean containsTag2(Node n, String tagname): Wie
containsTag
, nur sollen Sie jetzt einen NodelistSpliterator
zum Verarbeiten der Kinder mit der Methode reduce verwenden.
- void collectTagnames(Node n, Set result) : es sollen in der Ergebnismenge alle Tagnamen, die im Dokument auftreten, gesammelt werden.
- void collectTagnames2(Node n, Set result): wie
collectTagnames
, jetzt sollen Sie aber einen NodelistSpliterator
und die Methode forEach
zum Verarbeiten der Kinder verwenden.
- long getMaxWIDTHAttributeValue(Node n) : von allen
width
Attributen des Dokuments, dessen Wert eine Zahl repräsentiert, soll die größte Zahl > 0 ermittelt werden. existiert kein solches Attribut, so sei das Ergebnis 0.
package name.panitz.util.xml;
import java.util.Set;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class DOM implements DOMUtil{
public long height(Node n){
long result = 0;
return result + 1;
}
public long height2(Node n){
return 0;
}
public void collectText(Node n, StringBuffer result){
}
public void collectText2(Node n, StringBuffer result){
}
@Override
public boolean containsTag(Node n, String tagname) {
return false;
}
@Override
public boolean containsTag2(Node n, String tagname) {
return false;
}
@Override
public void collectTagnames(Node n, Set<String> result) {
}
@Override
public void collectTagnames2(Node n, Set<String> result) {
}
@Override
public long getMaxWIDTHAttributeValue(Node n) {
long result = 0;
return result;
}
}