Dom4j非官方工具,不在jdk中
使用步骤:
1)导入dom4j的核心包。 dom4j-1.6.1.jar
2)编写Dom4j读取xml文件代码
Dom4j提供的xml解析器对象
public static void main(String[] args) {
try {
//1.创建一个xml解析器对象
SAXReader reader = new SAXReader();
//2.读取xml文档,返回Document对象
Document doc = reader.read(new File("./src/contact.xml"));
System.out.println(doc);
} catch (DocumentException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
//得到节点信息
@Test
public void test1() throws Exception {
//读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("XmlDemo.xml"));
//nodeIterator:得到当前节点下的所有节点对象
Iterator<Node> it = document.nodeIterator();
while (it.hasNext()) {
//Node node =(Node) it.next();
Node node = it.next();
//判断其下面是否有子节点
//只有标签节点才会有子节点(节点、标签、属性、文本)
//判断当前节点是否是标签节点
if(node instanceof Element){
Element element = (Element) node;
Iterator<Node> it2 = element.nodeIterator();
while(it2.hasNext()){
Node n2 = it2.next();
System.out.println(n2.getName());
}
}
}
}
/*
* 遍历xml文档的所有节点
*/
@Test
public void test2() throws Exception{
//读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("XmlDemo.xml"));
//得到根标签
Element rootElement = doc.getRootElement();
getChildNodes(rootElement);
}
private void getChildNodes(Element element){
System.out.println(element.getName());
//得到子节点
Iterator<Node> it = element.nodeIterator();
while(it.hasNext()){
Node node = it.next();
//判断是否是标签节点
if(node instanceof Element){
Element el = (Element)node;
getChildNodes(el);
}
}
}
/*
* 获取属性
*/
@Test
public void test4() throws Exception{
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("XmlDemo.xml"));
//获取属性:(先获的属性所在的标签对象,然后才能获取属性)
//1.得到标签对象
Element contactElem = doc.getRootElement().element("book");
//2.得到属性
//2.1 得到指定名称的属性值
/*
String idValue = contactElem.attributeValue("id");
System.out.println(idValue);
*/
//2.2 得到指定属性名称的属性对象
/*Attribute idAttr = contactElem.attribute("id");
//getName: 属性名称 getValue:属性值
System.out.println(idAttr.getName() +"=" + idAttr.getValue());*/
//2.3 得到所有属性对象,返回LIst集合
/*List<Attribute> list = contactElem.attributes();
//遍历属性
for (Attribute attr : list) {
System.out.println(attr.getName()+"="+attr.getValue());
}*/
//2.4 得到所有属性对象,返回迭代器
Iterator<Attribute> it = contactElem.attributeIterator();
while(it.hasNext()){
Attribute attr = it.next();
System.out.println(attr.getName()+"="+attr.getValue());
}
}
/*
* 获取文本
*/
@Test
public void test5() throws Exception{
//1.读取xml文档,返回Document对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("XmlDemo.xml"));
/*
* 注意: 空格和换行也是xml的内容
*/
String content = doc.getRootElement().getText();
System.out.println(content);
//获取文本(先获取标签,再获取标签上的文本)
Element nameELem =
doc.getRootElement().element("book").element("title");
//得到文本
String text = nameELem.getText();
System.out.println(text);
//得到指定子标签名的文本内容
String text2 =
doc.getRootElement().element("book").elementText("author");
System.out.println(text2);
}
常用方法:
节点:
Iterator Element.nodeIterator();
//获取当前标签节点下的所有子节点
标签:
Element Document.getRootElement(); //获取xml文档的根标签
Element ELement.element("标签名") //指定名称的第一个子标签
List<Element> Element.elements(); //获取所有子标签
属性:
String Element.attributeValue("属性名") //获取指定名称的属性值
Attribute Element.attribute("属性名");//获取指定名称的属性对象
Attribute.getName() //获取属性名称
Attibute.getValue() //获取属性值
List<Attribute> Element.attributes(); //获取所有属性对象
Iterator<Attribute> Element.attibuteIterator();
//获取所有属性对象
文本:
Element.getText();
//获取当前标签的文本获取当前标签的指定名称的子标签的文本内容