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();// <shop 店铺>
		// 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内容:
<?xml version="1.0" encoding="UTF-8"?>
<shop 店铺="小店">
  <mobile  品牌="苹果6plus"  价格="6800"  颜色="白色"/>
  <mobile  品牌="华为meta8"  价格="3800"  颜色="金色"/>
</shop>

输出结果为:
店铺名称: 小店
品牌 = 苹果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); // 递归调用
			}
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<集团军 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<Element> 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);
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<用户信息>
  <!-- 通过【递归】调用,查询年龄在18岁以上的用户信息 -->
   <用户 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<Element> list=xmlObj.selectNodes(xPath);  //获得xml文件中任意位置符合条件的标签对象集合
		for(Element e:list){
			String elementName= e.getName();
			String elementData = e.getText();
			System.out.println(elementName+"  "+elementData);
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<学校>
 <名称>北京大学</名称>
 <班级>
    <名称>一年级一班</名称>
    <人数>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<Attribute> list = xmlObj.selectNodes(xPath);
		for (Attribute a : list) {
			String attributeName = a.getName();
			String attributeValue = a.getText();
			System.out.println(attributeName + " " + attributeValue);
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<集团军 name="李云龙集团军">
  <师  name="云龙1师">
     <团  name="云龙1团">
         <班  name="云龙1班">
            <战士 name="王小二"/>
            <战士/>
         </班>
     </团>
  </师>
  <师 name="云龙2师"/>
</集团军>
输出结果:
name 李云龙集团军
name 云龙1师
name 云龙1团
name 云龙1班
name 王小二
name 云龙2师








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值