预习Dom4J之:把XML输出到Java控制台

来源:互联网 发布:卡秋莎软件 编辑:程序博客网 时间:2024/06/08 05:59

结果:

准备:

xml文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE Students [<!ELEMENT Students (Student*)><!ELEMENT Student (Name,Age)><!ATTLIST Student id CDATA #REQUIRED> <!ATTLIST Student remark CDATA #IMPLIED> <!ELEMENT Name (#PCDATA)><!ELEMENT Age (#PCDATA)>]><Students><Student id="s001" remark="帅哥"><Name>洛清风</Name><Age>18</Age></Student><Student id="s002"><Name>穆修杉</Name><Age>19</Age></Student></Students>

开始:

1)导入Dom4J到Java工程

2)设计好打印xml到控制台的方法

/** * <p>Title:printXML</p> * <p>Description:打印xml</p> * @param elm需要打印的xml * @param indent首次缩进倍数 */public static void printXML(Element elm,int indent){//缩进字符串String indentStr="    ";//打印缩进for(int i=0;i<indent;i++){System.out.print(indentStr);}//得到该节点子节点的集合List nodes=elm.elements();//获得其所有属性List attrs=elm.attributes();StringBuffer attrStr=new StringBuffer("");if(attrs.size()>0){for (Iterator it = attrs.iterator(); it.hasNext();){Attribute attr=(Attribute)it.next();attrStr.append(" "+attr.getName()+"=\""+attr.getText()+"\"");}}//如果有子节点则换行,没有子节点不换行String enterStr=(nodes.size()<=0)?"":"\n";//得到标签的内容String elmStr=elm.getText();//打印前标签System.out.print("<"+elm.getName()+attrStr+">"+elmStr+enterStr);//遍历子节点集合 并递归这个子节点for (Iterator it = nodes.iterator(); it.hasNext();){printXML((Element) it.next(),indent+1);}//如果有孩子节点 后标签不缩进if(nodes.size()>0){for(int i=0;i<indent;i++){System.out.print(indentStr);}}//打印后标签System.out.println("</"+elm.getName()+">");}
3)在主函数获得需要打印的xml并调用上述方法

public static void main(String[] args) {SAXReader reader=new SAXReader();Document document=null;try {document=reader.read(new File(System.getProperty("user.dir")+File.separator+"xml"+File.separator+"Students.xml"));} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}printXML(document.getRootElement(),0);}