xml简单操作

1.获得根目录标签下直接子标签内容:
package com.xxx;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class 获得根目录标签下直接子标签内容 {
	/**
	 * @param args
	 * @throws DocumentException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws DocumentException, IOException {
		//1.读取流,指向硬盘上xml文件
		InputStream in =new FileInputStream("d://学校信息一览.xml");
        // 2.创建一个XML文件读取器
		SAXReader sax= new SAXReader();
		//3. 加载
		Document xmlObj=sax.read(in);
		// 4.读取【根目录标签】
		Element rootElement=xmlObj.getRootElement(); //<学校>
		// 5. 获得【根目录标签】下,标签名="班级"的所有的直接子标签
		@SuppressWarnings("rawtypes")
		Iterator elementIt=rootElement.elementIterator("班级");
		// 6. 获得每一个班级中【人数】和班级【名称】
		while(elementIt.hasNext()){
			Element classElement = (Element) elementIt.next();//<班级>
			Element classNameElement=classElement.element("名称");//<名称>
			Element classNumElement=classElement.element("人数");//<人数>
			// 获得标签名称
			String className=classNameElement.getName();
			String classNum=classNumElement.getName();
			//获得标签中包含的数据
			String classNameData=classNameElement.getText();//<名称>数据
			String classNumData=classNumElement.getText();//<人数>数据
			System.out.println(className+" : "+ classNameData);
			System.out.println(classNum+" : "+ classNumData);
		}
		in.close();
	}
}
学校信息一览.xml文件内容如下:
<学校>
 <名称>北京大学
 <班级>
    <名称>一年级一班
    <人数>98
    <学员>
       <名称>王二小
    
 
 <班级>
    <名称>一年级二班
    <人数>99
 
输出结果:
名称 : 一年级一班
人数 : 98
名称 : 一年级二班
人数 : 99
需要引入两个jar包(版本随意):
dom4j-1.6.1.jar

jaxen-1.1.1.jar

2.读取标签中属性内容:
package com.xxx;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Iterator;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class 读取标签中属性内容 {

	/**
	 * @param args
	 * @throws FileNotFoundException
	 * @throws DocumentException
	 */
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) throws FileNotFoundException, DocumentException {
		// 1.读取流,指向硬盘上xml文件
		InputStream in = new FileInputStream("d://手机信息.xml");
		// 2.创建一个XML文件读取器
		SAXReader sax = new SAXReader();
		// 3.加载 通过xml文件读取器对象,将读取流指向的xml文件加载到内存中
		Document xmlObj = sax.read(in);
		// 4.获得【根目录标签】
		Element rootElement = xmlObj.getRootElement();// 
		// 5.获得店铺名称
		String shopName = rootElement.attributeValue("店铺");
		System.out.println("店铺名称: " + shopName);
		// 6. 获得店铺中销售的手机信息
		Iterator mobileIt = rootElement.elementIterator();
		while (mobileIt.hasNext()) {
			Element mobile = (Element) mobileIt.next(); // 获取一个手机Element
			Iterator infoIt = mobile.attributeIterator();
			while (infoIt.hasNext()) {
				// 将当前标签中所有的属性,封装Attribute类型对象
				Attribute attributeObj = (Attribute) infoIt.next();
				// 获得属性名称
				String attributeName = attributeObj.getName();
				// 获得属性数据
				String attributeData = attributeObj.getText();
				System.out.println(attributeName + " = " + attributeData);
			}
		}
	}
}
手机信息.xml内容:


  
  

输出结果为:
店铺名称: 小店
品牌 = 苹果6plus
价格 = 6800
颜色 = 白色
品牌 = 华为meta8
价格 = 3800
颜色 = 金色

3.通过递归调用获得所有标签中name属性内容:
package com.xxx;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class 通过递归调用获得所有标签中name属性内容 {

	/**
	 * @param args
	 * @throws FileNotFoundException
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws FileNotFoundException, DocumentException {
		// 1.读取流,指向硬盘上xml文件
		InputStream in = new FileInputStream("d://部队信息一览.xml");
		// 2.创建一个XML文件读取器
		SAXReader sax = new SAXReader();
		// 3.加载
		Document xmlObj = sax.read(in);
		// 4.读取根目录标签
		Element rootElement = xmlObj.getRootElement();
		// 5.递归读取标签中name属性
		readName(rootElement);
	}

	public static void readName(Element e) {
		// 1.获得标签名称以及name属性对应的value
		String elementName = e.getName(); //标签名称
		String attributeNameValue = e.attributeValue("name");
		System.out.println(elementName + "  " + attributeNameValue);
		// 2.获得当前标签下,所有的【直接】子标签
		@SuppressWarnings("rawtypes")
		Iterator it = e.elementIterator();
		if (it != null) {
			while (it.hasNext()) {
				Element son = (Element) it.next();
				readName(son); // 递归调用
			}
		}
	}
}

<集团军 name="李云龙集团军">
  <师  name="云龙1师">
     <团  name="云龙1团">
         <班  name="云龙1班">
            <战士 name="王小二"/>
            <战士/>
         
     
  
  <师/>

输出结果:

集团军  李云龙集团军
师  云龙1师
团  云龙1团
班  云龙1班
战士  王小二
战士  null
师  null

4.XPath获得年龄在18岁以上的用户姓名:
package com.xxx;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class XPath获得年龄在18岁以上的用户姓名 {

	/**
	 * @param args
	 * @throws FileNotFoundException
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws FileNotFoundException, DocumentException {
		// 1.读取流,指向硬盘上xml文件
		InputStream in = new FileInputStream("d://用户信息一览.xml");
		// 2.创建一个XML文件读取器
		SAXReader sax = new SAXReader();
		// 3.加载
		Document xmlObj = sax.read(in);
		// 4.拼写xPath
		String xPath = "//用户[@age>=18]";
		@SuppressWarnings("unchecked")
		List list = xmlObj.selectNodes(xPath);
		for (Element e : list) {
			String elementName = e.getName();
			String userName = e.attributeValue("name");
			String userAge = e.attributeValue("age");
			System.out.println(elementName + "  " + userName + "  " + userAge);
		}
	}
}

<用户信息>
  
   <用户 name="王小二" age="20">
   <商品 name="兰盆" age="200">
   <用户 name="李小二" age="12">
   <用户 name="张小二" age="18">
   <商品 name="鼻烟壶" age="170">
输出结果:
用户  王小二  20
用户  张小二  18


5.XPATH获得任意位置的名称标签:
package com.xxx;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class XPATH获得任意位置的名称标签 {

	/**
	 * @param args
	 * @throws FileNotFoundException 
	 * @throws DocumentException 
	 */
	public static void main(String[] args) throws FileNotFoundException, DocumentException {
		//1.读取流,指向硬盘上xml文件
		InputStream in =new FileInputStream("d://学校信息一览.xml");
		//2.创建一个XML文件读取器
		SAXReader sax= new SAXReader();
		//3.加载 通过xml文件读取器对象,将读取流指向的xml文件加载到内存中
		Document xmlObj=sax.read(in);
		//4.拼写xPath  
		String xPath="//名称"; //只能获得标签名是"名称"的标签
		@SuppressWarnings("unchecked")
		List list=xmlObj.selectNodes(xPath);  //获得xml文件中任意位置符合条件的标签对象集合
		for(Element e:list){
			String elementName= e.getName();
			String elementData = e.getText();
			System.out.println(elementName+"  "+elementData);
		}
	}
}

<学校>
 <名称>北京大学
 <班级>
    <名称>一年级一班
    <人数>98
    <学员>
       <名称>王二小
    
 
 <班级>
    <名称>一年级二班
    <人数>99
 
输出结果:
名称  北京大学
名称  一年级一班
名称  王二小
名称  一年级二班


6.XPATH获得任意位置name属性内容:
package com.xxx;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class XPATH获得任意位置name属性内容 {

	/**
	 * @param args
	 * @throws FileNotFoundException
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws FileNotFoundException, DocumentException {

		// 1.读取流,指向硬盘上xml文件
		InputStream in = new FileInputStream("d://部队信息一览.xml");
		// 2.创建一个XML文件读取器
		SAXReader sax = new SAXReader();
		// 3.加载
		Document xmlObj = sax.read(in);
		// 4.拼写xPath
		String xPath = "//@name";  //获得所有Element的name属性
		@SuppressWarnings("unchecked")
		List list = xmlObj.selectNodes(xPath);
		for (Attribute a : list) {
			String attributeName = a.getName();
			String attributeValue = a.getText();
			System.out.println(attributeName + " " + attributeValue);
		}
	}
}

<集团军 name="李云龙集团军">
  <师  name="云龙1师">
     <团  name="云龙1团">
         <班  name="云龙1班">
            <战士 name="王小二"/>
            <战士/>
         
     
  
  <师 name="云龙2师"/>
输出结果:
name 李云龙集团军
name 云龙1师
name 云龙1团
name 云龙1班
name 王小二
name 云龙2师








你可能感兴趣的:(xml)