import java.util.Iterator; import components.simplereader.SimpleReader; import components.simplereader.SimpleReader1L; import components.simplewriter.SimpleWriter; import components.simplewriter.SimpleWriter1L; import components.xmltree.XMLTree; import components.xmltree.XMLTree2; /** * Program to practice recursion on {@code XMLTree}s. * * @author Put your name here * */ public final class XMLTreeRecursion { /** * Private constructor so this utility class cannot be instantiated. */ private XMLTreeRecursion() { } /** * Returns the number of occurrences of the given tag in the given * {@code XMLTree}. * * @param xml * the {@code XMLTree} * @param tag * the tag name * @return the number of occurrences of the given tag in the given * {@code XMLTree} * @ensures
     * tagCount =
     *    [the number of occurrences of the given tag in the given {@code XMLTree}]
     * 
*/ private static int tagCount(XMLTree xml, String tag) { assert xml != null : "Violation of: xml is not null"; assert tag != null : "Violation of: tag is not null"; // TODO - fill in body /* * This line added just to make the program compilable. Should be * replaced with appropriate return statement. */ return 0; } /** * Outputs the text nodes in the given {@code XMLTree} on separate lines. * * @param xml * the {@code XMLTree} * @param out * the output stream * @updates out.content * @requires out.is_open * @ensures
     * out.content = #out.content * [the text nodes of xml on separate lines]
     * 
*/ private static void outputTextNodes(XMLTree xml, SimpleWriter out) { assert xml != null : "Violation of: xml is not null"; assert out != null : "Violation of: out is not null"; assert out.isOpen() : "Violation of: out.is_open"; // TODO - fill in body } /** * Outputs n spaces. * * @param n * the number of spaces * @param out * the output stream * @updates out.content * @requires out.is_open and n >= 0 * @ensures out.content = #out.content * [n spaces] */ private static void outputSpaces(int n, SimpleWriter out) { assert out != null : "Violation of: out is not null"; assert out.isOpen() : "Violation of: out.is_open"; assert n >= 0 : "Violation of: n >= 0"; // TODO - fill in body } /** * Outputs the attributes ( name="value") of the given {@code XMLTree}'s * root node to the given output stream. * * @param xml * the {@code XMLTree} * @param out * the output stream * @updates out.content * @requires out.is_open and [the label of the root of xml is a tag] * @ensures
     * out.content =
     *    #out.content * [the attributes ( name="value") of the root of xml]
     * 
*/ private static void outputAttributes(XMLTree xml, SimpleWriter out) { assert xml != null : "Violation of: xml is not null"; assert out != null : "Violation of: out is not null"; assert xml.isTag() : "Violation of: the label of the root of xml is a tag"; assert out.isOpen() : "Violation of: out.is_open"; // TODO - fill in body } /** * Output the XML textual representation of the given {@code XMLTree}. * * @param xml * the {@code XMLTree} * @param out * the output stream * @param indentationLevel * the level of indentation * @updates out.content * @requires out.is_open and indentationLevel >= 0 * @ensures
     * out.content = #out.content * [the XML textual representation of xml]
     * 
*/ private static void outputXML(XMLTree xml, SimpleWriter out, int indentationLevel) { assert xml != null : "Violation of: xml is not null"; assert out != null : "Violation of: out is not null"; assert out.isOpen() : "Violation of: out.is_open"; assert indentationLevel >= 0 : "Violation of: indentationLevel >= 0"; // TODO - fill in body } /** * Main method. * * @param args * the command line arguments */ public static void main(String[] args) { SimpleReader in = new SimpleReader1L(); SimpleWriter out = new SimpleWriter1L(); out.print("Enter a URL or file name for an XML source: "); String url = in.nextLine(); XMLTree xml = new XMLTree2(url); out.print("Enter the name of a tag: "); String tag = in.nextLine(); while (!tag.equals("")) { int count = tagCount(xml, tag); out.println("The tag <" + tag + "> appears " + count + " times."); out.println(); out.print("Enter the name of a tag: "); tag = in.nextLine(); } out.println(); out.println("The text nodes:"); outputTextNodes(xml, out); // out.println(); // out.println("The XML:"); // outputXML(xml, out, 0); in.close(); out.close(); } }