Subato

Resource Files

DOM

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; } }
java
You are not logged in and therefore you cannot submit a solution.