使用dom4j递归读取xml文件和写入代码
public void read() throws IOException, DocumentException {
// 创建saxReader对象
SAXReader reader = new SAXReader();
// 通过read方法读取一个文件 转换成Document对象
Document document = reader.read(new File("./db/y.xml"));
//获取根节点元素对象
Element node = document.getRootElement();
//遍历所有的元素节点
listNodes(node);
//通过路径选择节点,如果xml文件中没有该路径,则返回null
Element element1 =(Element)document.selectSingleNode("/四大名著") ;
//通过路径选择节点,如果xml文件中没有该路径,则返回创建一个节点
Element element2=DocumentHelper.makeElement(document,"/四大名著/水浒传/人物");
//添加CDATA区域
elemen2t.addCDATA("林冲,武松");
//获取该节点的父节点
Element element3=element.getParent();
element1.add(element2);
// 写入到一个新的文件中
writer(document);
}
public void listNodes(Element node){
if(node==null){
System.out.println("null");
return;
}
System.out.println("当前节点的路径::" + node.getPath());
//获取字节点
List<Element> elements=node.elements();
for(Element element:elements){
if(element.isTextOnly()){
System.out.println("当前节点的名称:" + element.getName()+"---- "+element.getText());
} else {
listNodes(element);
}
}
}
public void writer(Document document) throws IOException {
OutputFormat format = format();
// 创建XMLWriter对象,指定了写出文件及编码格式
XMLWriter writer = new XMLWriter(new FileOutputStream("./db/y.xml"), format);
// 写入
writer.write(document);
// 立即写入
writer.flush();
// 关闭操作
writer.close();
}
/**
* 文件格式化
*
* @return OutputFormat
*/
public OutputFormat format() {
OutputFormat format = new OutputFormat();
format.setIndentSize(4);
format.setNewlines(true);
format.setTrimText(true);
format.setPadText(true);
format.setEncoding("UTF-8");
return format;
}
y.xml文件中的内容
<?xml version="1.0" encoding="UTF-8"?>
<四大名著>
<西游记>
<作者>吴承恩1</作者>
<作者>吴承恩2</作者>
<朝代>明朝</朝代>
</西游记>
<红楼梦>
<作者>曹雪芹</作者>
</红楼梦>
</四大名著>
Xml文件路径验证器
/**
* 验证xPath语法是否有效
*
* @param path xPath路径
* @return true/false
*/
public static Boolean xPathVerify(String path) {
XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
try {
xPath.compile(path);
} catch (XPathExpressionException e) {
return false;
}
return true;
}
自己记录的一些笔记,内容如有不对请指正