fork(1) download
  1. import java.io.File;
  2. import javax.xml.parsers.*;
  3. import org.w3c.dom.*;
  4. import javax.xml.transform.*;
  5. import javax.xml.transform.dom.*;
  6. import javax.xml.transform.stream.*;
  7. class MainClass {
  8. public static void main(String[] args) throws Exception {
  9. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //создали фабрику строителей, сложный и грамосткий процесс (по реже выполняйте это действие)
  10. DocumentBuilder db = dbf.newDocumentBuilder(); // создали конкретного строителя документа
  11. Document doc = db.parse(System.in); // стооитель построил документ
  12. Node x = doc;
  13. visit(doc, 0);
  14.  
  15.  
  16.  
  17. // print
  18. /*
  19.   DOMSource source = new DOMSource(doc);
  20.   StreamResult result = new StreamResult(System.out);//Может быть любой поток вывода (файл, сокет ....)
  21.   TransformerFactory transFactory = TransformerFactory.newInstance(); // Об этом подробней в 4 вопросе
  22.   Transformer transformer = transFactory.newTransformer();
  23.   transformer.transform(source, result);
  24.   */
  25. }
  26. public static void visit(Node node, int level) {
  27. NodeList list = node.getChildNodes();
  28. for (int i = 0; i < list.getLength(); i++) {
  29. Node childNode = list.item(i); // текущий нод
  30. process(childNode, level + 1); // обработка
  31. visit(childNode, level + 1); // рекурсия
  32. }
  33. }
  34. public static void process(Node node, int level) {
  35. for (int i = 0; i < level; i++) {
  36. System.out.print('\t');
  37. }
  38. System.out.print(node.getNodeName());
  39. if (node.getNodeType()==Node.ELEMENT_NODE){
  40. Element e = (Element) node;
  41. // работаем как с элементом (у него есть атрибуты и схема)
  42. NamedNodeMap atts = e.getAttributes();
  43. try {
  44. System.out.print(": " + atts.getNamedItem("id").getNodeValue());
  45. } catch (Exception ex) {System.out.print(": -");}
  46. }
  47. if (node.getNodeType()==Node.TEXT_NODE){
  48. System.out.print("\t"+node.getNodeValue().trim());
  49. }
  50. System.out.println();
  51. }
  52. }
  53.  
Success #stdin #stdout 0.15s 321152KB
stdin
<expression> 
  <operation id="+"> 
    <variable>x</variable> 
    <number>10</number> 
    <operation id="*">
       <number>2</number>
       <number>3</number> 
    </operation> 
    <number>12</number> 
  </operation> 
</expression> 
stdout
	expression: -
		#text	
		operation: +
			#text	
			variable: -
				#text	x
			#text	
			number: -
				#text	10
			#text	
			operation: *
				#text	
				number: -
					#text	2
				#text	
				number: -
					#text	3
				#text	
			#text	
			number: -
				#text	12
			#text	
		#text