packagecom.abc.demo.general.xml;importorg.dom4j.Document;importorg.dom4j.DocumentHelper;importorg.dom4j.Element;importorg.dom4j.Node;importorg.dom4j.io.OutputFormat;importorg.dom4j.io.SAXReader;importorg.dom4j.io.XMLWriter;importorg.junit.Test;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.io.ByteArrayOutputStream;importjava.util.List;/*** 使用dom4j处理xml*/
public classDom4jCase {private static Logger logger = LoggerFactory.getLogger(Dom4jCase.class);/*** 解析xml
*@throwsException*/@Testpublic void parse() throwsException {
SAXReader reader= newSAXReader();
Document document= reader.read(DomCase.class.getResourceAsStream("student.xml"));//Document document = DocumentHelper.parseText(xmlString);//解析字符串
Element root =document.getRootElement();
List list = root.elements("student");for (int i = 0; i < list.size(); i++) {
Element student=list.get(i);
logger.info("学生编号{}", student.attributeValue("rollno"));
logger.info("testattr:{}", student.attributeValue("testattr"));
logger.info("firstname:{}", student.elementText("firstname"));
logger.info("lastname:{}", student.elementText("lastname"));
logger.info("nickname:{}", student.elementText("nickname"));
logger.info("marks:{}", student.elementText("marks"));
}
}/*** xpath使用
*@throwsException*/@Testpublic void xpath() throwsException {
SAXReader reader= newSAXReader();
Document document= reader.read(DomCase.class.getResourceAsStream("student.xml"));
logger.info("查找所有的存在rollno属性的student节点,取出lastname的值");
List list = document.selectNodes("//student[@rollno]/lastname/text()");//第二、三位学生//List list = document.selectNodes("//student[@rollno]/child::lastname/test()");//效果同上
for (int i = 0; i < list.size(); i++) {
Node node=list.get(i);
logger.info(node.getText());
}
logger.info("查找所有的存在rollno属性的student节点");
list= document.selectNodes("//school:student[@rollno]");//第一位学生
for (int i = 0; i < list.size(); i++) {
Node node=list.get(i);//获取rollno的属性值
logger.info(node.valueOf("@rollno"));
}
}/*** 生成xml*/@Testpublic void toXml() throwsException {
Document document=DocumentHelper.createDocument();
Element root= document.addElement("school:class", "http://www.w3.org/TR/html4/school/");//第一个学生
Element student = root.addElement("school:student");
student.addAttribute("rollno", "1");
student.addAttribute("school:testattr", "test");
student.addElement("school:firstname").setText("cxx1");
student.addElement("lastname").setText("Bob1");
student.addElement("nickname").setText("stars1");
student.addElement("marks").setText("85");//第二个学生
student = root.addElement("student");
student.addAttribute("rollno", "2");
student.addElement("school:firstname").setText("cxx2");
student.addElement("lastname").setText("Bob2");
student.addElement("nickname").setText("stars2");
student.addElement("marks").setText("85");//第三个学生
student = root.addElement("student");
student.addAttribute("rollno", "3");
student.addElement("school:firstname").setText("cxx3");
student.addElement("lastname").setText("Bob3");
student.addElement("nickname").setText("stars3");
student.addElement("marks").setText("85");//直接转成字符串//logger.info(document.asXML());//格式化并输出到输出流
ByteArrayOutputStream out = newByteArrayOutputStream();
OutputFormat format=OutputFormat.createPrettyPrint();
XMLWriter writer= newXMLWriter(out, format);
writer.write(document);
logger.info(out.toString());
}
}