saxReader和documentHelper对xml的解析与创建

前段时间做了一个两个项目之间同步数据的接口,主要就是用到了xml作为数据的载体,主要技术就是解析和创建xml.

解析和创建xml的方法有很多,以前一直用dom4j的saxReader比较多.这次做项目接触到了一个documentHelper.所以记录一下dom4j中saxReader和documentHelper对于xml相关的使用.源码看这里

maven依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
	<dependency>
	    <groupId>dom4j</groupId>
	    <artifactId>dom4j</artifactId>
	    <version>1.6.1</version>
	</dependency>
    
  </dependencies>
首先是一个静态代码块用于模拟数据,以及一些变量的初始化

        private static List<Map<String,String>> students = new ArrayList<Map<String,String>>();//模拟学生集合
 	private static Map<String,String> student = null;	//模拟student对象
	private static final String filePath = "D:\\test.xml";//存放xml文件位置
	
	/**
	 * 初始化数据
	 */
	static{
		student = new HashMap<String,String>();
		student.put("name", "麦迪");
		student.put("sex", "man");
		student.put("addr", "hlj");
		students.add(student);
		student = new HashMap<String,String>();
		student.put("name", "zwl");
		student.put("sex", "woman");
		student.put("addr", "ah");
		students.add(student);
	}
1.创建xml,并返回xml字符串

 /**
     * 创建xml 返回xml字符串
     * @return
     */
    private static String createXml(){
    	Document doc = DocumentHelper.createDocument();//DocumentHelper创建document对象
    	Element root = doc.addElement("Results");//创建根节点
    	Element studentsElem = root.addElement("students");
    	for( Map<String,String> student:students){//遍历集合 创建子节点
    		Element studentElem = studentsElem.addElement("student");
    		studentElem.addElement("name").addText(student.get("name"));
    		//创建节点并增加文本  (<sex id="test">man</sex>   name->sex text->man attribute->(id:test(value)))
    		studentElem.addElement("sex").setText(student.get("man"));//set,add都可以添加文本
    		studentElem.addElement("addr").addText(student.get("addr"));
//    		studentElem.addAttribute("name",student.get("name") );//<student name="yz">
    		
    		System.out.println(studentElem.getName());//student
        	System.out.println(studentElem.getText());//""//如果还有子节点 则text为""
        	System.out.println(studentElem.getStringValue());//yzmanhlj 获取所有子节点text
        	System.out.println(studentElem.elementText("sex"));//yz 获取子节点name等于sex的text 可以使用studentElem.element("sex") 获取sex节点
        	System.out.println(studentElem.elements());//子节点集合
    	}
    	
    	return doc.asXML();//文档对象座位xml返回
    };
2.创建xml文件,写入磁盘

 private  static void createXmlOutAsFile(){
    	Document doc = DocumentHelper.createDocument();
    	Element root = doc.addElement("Results");
    	Element studentsElem = root.addElement("students");
    	for( Map<String,String> student:students){
    		Element studentElem = studentsElem.addElement("student");
    		studentElem.addElement("name").addText(student.get("name"));
    		studentElem.addElement("sex").setText(student.get("sex"));;
    		studentElem.addElement("addr").addText(student.get("addr"));
    	}
    	//输出格式  
        OutputFormat format = OutputFormat.createPrettyPrint();  
        //设置编码  
        format.setEncoding("UTF-8");  
    	XMLWriter write;
		try {
			File f = new File(filePath);
			write = new XMLWriter(new FileOutputStream(f),format );
			write.write(doc);
			write.flush();
			write.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
    };

3.documentHelper解析xml

  /**
     * DocumentHelper解析xml DocumentHelper只能读取String 不能读取文件路径
     */
	private static void parseXMLByDocumentHelper(){
    	try {
			InputStream is =  new FileInputStream(filePath);
			ByteArrayOutputStream  os = new ByteArrayOutputStream();
			int length;
			byte[] temp = new byte[1024];
			while ((length=(is.read(temp)))>0) {
				os.write(temp, 0, length);
			}
			StringBuffer xml = new StringBuffer(os.toString());
			Document doc = DocumentHelper.parseText(xml.toString());//解析xml字符串形成document对象
			Element root = doc.getRootElement();//获取根节点
			Element studentsElem = root.element("students");//获取students节点
			for (Iterator i= studentsElem.elementIterator("student");i.hasNext();) {//遍历students下面的student节点
				Element elem = (Element) i.next();
				System.out.println(elem.elementText("name"));//获取子节点name的text
				System.out.println(elem.elementText("sex"));
				System.out.println(elem.elementText("addr"));
//				System.out.println(elem.getName());//student
//				System.out.println(elem.getText());//"" 因为还有子节点 所有student的text为""
//				System.out.println(elem.element("name").getText());//获取子节点name的text
			}
    	} catch (Exception e) {
			e.printStackTrace();
		}
    }
4.saxReader解析xml

 /**
     * SAXReader解析xml SAXReader读取文件路径
     */
    private static void parseXMLBySaxReader(){
    	SAXReader sax = new SAXReader();
    	try {
    		Document doc = sax.read(filePath);
    		Element root = doc.getRootElement();
    		searchDoc(root);//递归遍历节点
    	} catch (Exception e) {
			e.printStackTrace();
		}
    }
    
    private static void searchDoc(Element elem) {
    	List<Element> elems = elem.elements();
    	for(Element ele:elems){
    		System.out.println("Name:"+ele.getName());
    		System.out.println("Text:"+ele.getText());
    		if(ele.elements().size()>0){
    			searchDoc(ele);
    		}
    	}
    }

本片文章只是简单介绍了dom4j的对于xml的解析与创建,我们还可以对其进行增加节点删除修改等操作,有兴趣的自行百度~~~

以下为生成的xml文件





  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解析XML文件有多种方式,其中两种常用的方法是使用SAXReaderDocumentHelper。下面分别介绍一下这两种方法的使用。 使用SAXReader解析XML字符串: 1.首先导入相关的包和类: ```java import java.io.StringReader; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; ``` 2.将XML字符串转换为输入流,并将输入流传给SAXReader对象: ```java String xmlString = "<root><person><name>John</name></person></root>"; SAXReader reader = new SAXReader(); Document document = reader.read(new StringReader(xmlString)); ``` 3.获取根节点并遍历子节点: ```java Element root = document.getRootElement(); List<Element> personList = root.elements("person"); for (Element person : personList) { String name = person.elementText("name"); System.out.println(name); } ``` 使用DocumentHelper解析XML字符串: 1.首先导入相关的包和类: ```java import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.DocumentHelper; ``` 2.使用DocumentHelperXML字符串转换为Document对象: ```java String xmlString = "<root><person><name>John</name></person></root>"; Document document = DocumentHelper.parseText(xmlString); ``` 3.获取根节点并遍历子节点: ```java Element root = document.getRootElement(); List<Node> personList = root.selectNodes("person"); for (Node person : personList) { String name = ((Element) person).elementText("name"); System.out.println(name); } ``` 以上就是使用SAXReaderDocumentHelper解析XML字符串的方法。需要注意的是,这里使用了dom4j库进行XML解析,因此需要先导入dom4j的相关包。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值