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()+">");
}