/** * @author Stefan Haustein * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. */ import java.io.*; import org.xmlpull.v1.*; import org.kxml2.io.*; class Node { private String text; private Node yes; // if null, it's an answer private Node no; Node(String answer) { this.text = answer; } Node(String question, Node yes, Node no) { this.text = question; this.yes = yes; this.no = no; } void run () throws IOException { if (yes == null) System.out.println ("Answer: "+text); else { System.out.println (text+ " (y/n)"); while (true) { int i = System.in.read(); if (i == 'y' || i == 'Y') { yes.run(); break; } else if (i == 'n' || i == 'N') { no.run(); break; } } } } } public class YesNoGame { public static Node parseAnswer(XmlPullParser p) throws IOException, XmlPullParserException { p.require(p.START_TAG, "", "answer"); Node result = new Node (p.nextText()); p.require(p.END_TAG, "", "answer"); return result; } public static Node parseQuestion(XmlPullParser p) throws IOException, XmlPullParserException { p.require(p.START_TAG, "", "question"); String text = p.getAttributeValue("", "text"); Node yes = parseNode (p); Node no = parseNode (p); p.nextTag(); p.require(p.END_TAG, "", "question"); return new Node (text, yes, no); } public static Node parseNode (XmlPullParser p) throws IOException, XmlPullParserException { p.nextTag (); p.require(p.START_TAG, "", null); if (p.getName().equals("question")) return parseQuestion(p); else return parseAnswer(p); } public static void main(String[] args) throws IOException, XmlPullParserException { String sample = "<question text='Is it round?'>\n" + " <question text='Is it bright?'>\n" + " <answer>It is the Sun!</answer>\n" + " <answer>It is a ball!</answer>\n" + " </question>\n" + " <answer>I do not know!</answer>\n" + "</question>\n"; XmlPullParser p = new KXmlParser(); p.setInput (new StringReader (sample)); Node game = parseNode (p); game.run(); } }