用JDOM和DOM4J解析节点名节点值
1、用JDOM解析节点名和节点值
1、创建一个SAXBuilder对象
2、创建一个输入流, 将xml文件加载到文件中
3. 通过saxBuilder的方法,将输入流加载到saxBuilder
4. 通过document对象获取xml文件的根节点
5. 获取根节点下的子节点的List集合(蓝色部分)
6、获取子节点的子节点的List集合(黄色部分)
7、如果遇到了乱码可以修改xml文件的编码,或者用InputStreamReader承接(红色部分)
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.jdom2.Attribute; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdom2.input.SAXBuilder; public class JDOMTest { public static void main(String[] args) { //进行对book.xml的JDOM解析 //准备工作 //1、创建一个SAXBuilder对象 SAXBuilder saxBuilder = new SAXBuilder(); InputStream in; try { //2、创建一个输入流, 将xml文件加载到文件中 in = new FileInputStream("src/res/book.xml");
//InputStreamReader isr = new InputStreamReader(in, "UTF-8"); //3.通过saxBuilder的方法,将输入流加载到saxBuilder Document document = saxBuilder.build(in); //4.通过document对象获取xml文件的根节点 Element element = document.getRootElement(); //5.获取根节点下的子节点的List集合 List<Element> bookList = element.getChildren(); //继续进行解析 for(Element book: bookList) {
//bookList.indexOf(book)得到book元素在bookList之中的位置,可以输出序号
System.out.println("----------------开始解析第" + (bookList.indexOf(book) + 1)
+ "本书---------------");
//解析book的属性
List<Attribute> attributes = book.getAttributes();
for(Attribute attr: attributes) {
//获取属性值(知道属性名)
//String value = book.getAttributeValue("id");
//获取属性名和属性值(不知道属性名)
String attrName = attr.getName();
String attrValue = attr.getValue();
System.out.println("属性名" + attrName + " 属性值" + attrValue);
}
//对book节点的子节点的节点名和节点值的遍历
//在JDOM中每个节点都有getChildren方法,都可以通过getName和getValue
//获取节点名和节点值
List<Element> bookChildren = book.getChildren();
for (Element bookChild : bookChildren) {
System.out.println("属性名:" + bookChild.getName()
+ " 属性值:" + bookChild.getValue());
}
System.out.println("----------------结束解析第" + (bookList.indexOf(book) + 1) + "本书---------------"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
8、存入book类中,在上一篇《用SAX方法解析xml文件》中有代码,这里不再赘述,传送门:https://www.cnblogs.com/songaodi/p/9323830.html
9、在使用JDOM过程中,如果要把你的java工程export其他电脑上,jar包不会跟随工程export,因为它只是引用了jar包,那么怎么让jar包跟着工程走呢?往下看
(1)、把jar包取消导入,点击remove
(2)我们发现程序报错了,因为找不到包了
(3)在工程下建一个folder,把jar包复制过来
(4)选中jar包加入工程Build Path --->Add JARs
(5)完成了!!!
10、用DOM4J解析节点名和节点值
package cn.edu.zzuli.DOM4JTest; import java.io.File; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class DOM4J { public static void main(String[] args) { //解析xml文件 //创建SAXReader的对象reader SAXReader reader = new SAXReader(); try { //通过reader对象的read方法加载book。xml文件 Document document = reader.read(new File("src/res/book.xml")); //通过document的getRootElement获取根节点 Element bookstore = document.getRootElement(); //遍历根节点的子节点,用Element对象的elementIterator获取子节点的迭代器 Iterator<Element> booksIterator = bookstore.elementIterator(); //遍历迭代器,获取根节点的信息 while(booksIterator.hasNext()) { System.out.println("------开始遍历某本书---------"); Element book = booksIterator.next(); //获取book的属性名和属性值 List<Attribute> bookattributes = book.attributes(); for (Attribute attribute : bookattributes) { System.out.println("属性名: " + attribute.getName() + "--属性值:" + attribute.getValue()); } //遍历book节点子节点,elementIterator得到迭代器 Iterator it2 = book.elementIterator(); while(it2.hasNext()) { Element bookChild = (Element)it2.next(); System.out.println("节点名:" + bookChild.getName() + "--节点值:" + bookChild.getStringValue()); } System.out.println("------结束遍历某本书---------"); } } catch(DocumentException e) { e.printStackTrace(); } } }