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

xiaoxiao2021-02-28  48

结果:

准备:

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 block e.printStackTrace(); } printXML(document.getRootElement(),0); }

转载请注明原文地址: https://www.6miu.com/read-53273.html

最新回复(0)