您的位置:首页 > 编程语言 > Java开发

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

2017-08-31 19:42 267 查看
结果:



准备:

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
7dfb
[] 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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: