JDOM解析xml
创建一个SAXBuilder对象,创建输入流 将xml加载到流中,将输入流加载到saxBuilder 返回Document对象
SAXBuilder saxBuilder=new SAXBuilder();
InputStream in=new FileInputStream("books.xml");
Document document=saxBuilder.build(in);
获取根节点
Element element=document.getRootElement();
获取子节点的集合
List<Element> list_element=element.getChildren();
然后通过ELement的getName与getValue方法进行解析
代码:
public class JdomText {
static Book book;
static ArrayList<Book> books=new ArrayList<>();
public static void main(String[] args) {
//创建一个SAXBuilder对象
SAXBuilder saxBuilder=new SAXBuilder();
try {
//创建输入流 将xml加载到流中
InputStream in=new FileInputStream("books.xml");
//将输入流加载到saxBuilder 返回Document对象
Document document=saxBuilder.build(in);
//获取根节点
Element element=document.getRootElement();
//获取子节点
List<Element> list_element=element.getChildren();
for (Element element2 : list_element) {
book=new Book();
System.out.println("开始遍历第"+(list_element.indexOf(element2)+1)+"本书");
//已知属性名获取属性值
// System.out.println(element2.getAttributeValue("id"));
//获取属性的集合 遍历获取属性名与内容
List<Attribute> list=element2.getAttributes();
for (Attribute attribute : list) {
System.out.print(attribute.getName());
System.out.println("------"+attribute.getValue());
if (attribute.getName().equals("id")) {
book.setId(attribute.getValue());
}
}
//获取book节点的子节点的集合 进行遍历 输出
List<Element> list2= element2.getChildren();
for (Element element3 : list2) {
System.out.print(element3.getName());
System.out.println("-----"+element3.getValue());
if (element3.getName().equals("name")){
book.setName(element3.getValue());
}else if (element3.getName().equals("year")){
book.setYear(element3.getValue());
}else if (element3.getName().equals("price")){
book.setPrice(element3.getValue());
}
}
System.out.println("结束遍历第"+(list_element.indexOf(element2)+1)+"本书");
books.add(book);
book=null;
}
for (Book book : books) {
System.out.println(book.getName()+"+-++-+-+++++");
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
DOM4J解析
与JDOM不同在于,这个方法返回的是迭代器,那个是List
代码:
public class Dom4j_test {
public static void main(String[] args) {
//创建SAXReader对象
SAXReader reader=new SAXReader();
try {
//加载xml文件
Document document= reader.read(new File("books.xml"));
//获取根节点
Element element=document.getRootElement();
//获取迭代器
Iterator<Element> iterator=element.elementIterator();
while (iterator.hasNext()) {
//获取节点
Element element2 = (Element) iterator.next();
//获取并遍历属性
List<Attribute> attributes=element2.attributes();
for (Attribute attribute : attributes) {
System.out.println(attribute.getName()+"-----"+attribute.getValue());
}
//获取book节点 的子节点 并遍历
Iterator<Element> iterator2= element2.elementIterator();
while (iterator2.hasNext()) {
Element element3 = (Element) iterator2.next();
System.out.println(element3.getName()+"-------"+element3.getStringValue());
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}