dom4j的api接口 | 描述 |
---|---|
Node | dom4j树中所有节点的接口 |
Element | xml元素 |
Doucument | xml文档 |
Attribute | xml元素属性 |
DocumentType | xml文档中DOCTYPE声明 |
CDATA | xml文档中的CDATA段 |
Text | xml中的文本内容 |
Comment | xml文档注释内容 |
read 提供多种读取xml文件的方式,返回一个Domcument对象
getRootElement 获取根节点
getName 获取node名字,例如获取根节点名称为bookstore
getNodeType 获取node类型常量值,例如获取到bookstore类型为1——Element
getNodeTypeName 获取node类型名称,例如获取到的bookstore类型名称为Element
attributes 返回该元素的属性列表
attributeValue 根据传入的属性名获取属性值
elementIterator 返回包含子元素的迭代器
elements 返回包含子元素的列表
getName 获取属性名
getValue 获取属性值
getText 获取Text节点值
/**
* dom4j是一个第三方开源的库。使用dom4j解析xml需要导入dom4j的jar包。
*/
public class Test2 {
public static void main(String[] args) throws Exception {
ReadXml("books.xml");//读取xml
ChangeAndWriteXml();//更改xml
ReadXml("books2.xml");//读取更改后的xml
}
private static void ChangeAndWriteXml() throws Exception {
SAXReader reader = new SAXReader();
//得到document
Document doc = reader.read(new File("books.xml"));
//得到根节点
Element root = doc.getRootElement();
//在element(Book)这个节点下添加子节点
Element element=root.element("Book");
Element elm = element.addElement("折扣");
elm.setText("9");
//修改节点
//修改节点名
element.setName("Book1");
System.out.println( element.getName() );
//修改节点值
Element price = element.element("price");
price.setText("300");
删除节点
Element Book = root.element("Book");
root.remove(Book);
//再修改之后需要将修改的写入新的xml文件或进行回写
//将文档写入xml文件
// //文档中全为英文,不设置编码,直接写入的形式.
// XMLWriter writer = new XMLWriter(new FileWriter("ot.xml"));
// writer.write(document);
// writer.close();
//文档中含有中文字符需要设置文档编码
OutputFormat format = OutputFormat.createPrettyPrint(); // 创建文件输出的时候,自动缩进的格式
format.setEncoding("UTF-8");//设置编码
XMLWriter writer;
try {
writer = new XMLWriter(new FileWriter("books2.xml"),format);
writer.write(doc);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
doc = reader.read(new File("books2.xml"));
}
private static void ReadXml(String url) throws Exception {
SAXReader reader = new SAXReader();
//得到document
Document doc = reader.read(new File(url));
//得到根节点
Element root = doc.getRootElement();
//得到book
List<Element> list=root.elements("book");
// 设置一个迭代器,来循环获取根节点中的信息
Iterator<Element> it = root.elementIterator();
while( it.hasNext() ) {
Element element = it.next();
//得到element下的属性名称和属性值
List<Attribute> bookAttrs = element.attributes();
for (Attribute attr : bookAttrs) {
System.out.println("属性名:" + attr.getName() + "--属性值:"
+ attr.getValue());
}
//获取element下的节点名称和节点值
for( Element e:element.elements() ) {
System.out.println( "节点名:"+e.getName()+"--数据:"+e.getText() );
}
}
}
}
以下是xml文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Books>
<Book id="1">
<bname>java从入门到放弃</bname>
<author>nicky</author>
<isbn>7-456-3278</isbn>
<price>9.9</price>
</Book>
<Book id="2">
<bname>mysql从删库到跑路</bname>
<author>lq</author>
<isbn>7-456-3278</isbn>
<price>9.9</price>
</Book>
</Books>