1.利用dom4j构建xml文档,并且输出到控制台上和文件中
public static void main(String[] args) throws Exception { //创建文档并设置文档的根元素节点 //第一种方式 Document document=DocumentHelper.createDocument(); //创建文档根节点 Element root=DocumentHelper.createElement("persons");//创建XML文档元素 document.setRootElement(root); //设置为根元素 //第二种方式 //Document document=DocumentHelper.createDocument(DocumentHelper.createElement("persons")); Element e1= root.addElement("person"); //根元素添加元素person,返回的是新添加的元素 e1.addAttribute("stuno", "001"); //person元素添加属性 e1.addElement("name").setText("cash"); //person元素添加子元素name,gender,age,并为其设置值 e1.addElement("gender").setText("female"); e1.addElement("age").setText("20"); //输出构建好的xml文档 //输出到控制台,没有进行格式化 XMLWriter xmlWriter=new XMLWriter(); xmlWriter.write(document); //输出到文件中,并在输出时对xml文档进行格式化(使用文件输出字节流) OutputFormat format=new OutputFormat(" ", true);//自定义xml的格式化方式,每行前面空四格,并且每行输出后换行 XMLWriter xmlWriter2=new XMLWriter(new FileOutputStream("persons.xml"),format);//使用带格式化参数的XMLWriter构造器,构造XMLWriter xmlWriter2.write(document); //输出到文件中,并在输出时对xml文档进行格式化(使用文件输出字符流) XMLWriter xmlWriter3=new XMLWriter(new FileWriter("person.xml"),format); xmlWriter3.write(document); xmlWriter3.flush();//必须要将writer强制输出或者关闭,其内部是将构建的FileWirter流关闭 }
2.利用dom4j读取已有的xml文档,输出到控制台上
1>使用SAXReader解析XML文档:
SAXReader saxReader=new SAXReader();//构建SAXReader解析器 Document document=saxReader.read(new File("person.xml")); //读取XML文档,构建Document文档对象 Element root=document.getRootElement(); //获取文档的根节点 parseXMLSAXReader(root); //利用递归循环读取XML文档内容
private static void parseXMLSAXReader(Element element){
System.out.print("<"+element.getName());
List<Element> elements=element.elements(); //获取节点下的所有子节点
List<Attribute> attributes=element.attributes();//获取节点下的所有属性
if(null!=attributes){
for (Attribute attr:attributes) { //迭代属性
String attrname=attr.getName();
String attrvalue=attr.getValue();
System.out.print(" "+attrname+"=\""+attrvalue+"\"");
}
}
System.out.print(">");
if(null!=elements&&0!=elements.size()){ //迭代子节点
for(Iterator<Element> iterator=elements.iterator();iterator.hasNext();){
Element e=iterator.next();
parseXMLSAXReader(e);
}
}else{
System.out.print(element.getText()); //节点下没有子节点,将节点内容输出
}
System.out.print("</"+element.getName()+">");
}
2>利用DomReader解析XML文档
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); org.w3c.dom.Document document2=builder.parse(new File("persons.xml")); DOMReader domReader=new DOMReader(); //构建DOMReader解析器 Document document3=domReader.read(document2); Element root1=document3.getRootElement(); parseXMLDom4jReader(root1);
private static void parseXMLDom4jReader(Element element){ System.out.print("<"+element.getName()); List<Element> elements=element.elements(); //获取节点下的所有子节点 List<Attribute> attributes=element.attributes();//获取节点下的所有属性 if(null!=attributes){ for (Attribute attr:attributes) { //迭代属性 String attrname=attr.getName(); String attrvalue=attr.getValue(); System.out.print(" "+attrname+"=\""+attrvalue+"\""); } } System.out.print(">"); if(null!=elements&&0!=elements.size()){ //迭代子节点 for(Iterator<Element> iterator=elements.iterator();iterator.hasNext();){ Element e=iterator.next(); parseXMLDom4jReader(e); } }else{ System.out.print(element.getText()); //节点下没有子节点,将节点内容输出 } System.out.print("</"+element.getName()+">"); }