MOOC华东师范大学 Java核心技术(进阶)第四章作业 JSON和XML读写

题目:读入以下的score.xml文件,并转化为JSON  Object对象,输出JSON Object的字符串表达式。
 最后,根据JSON Object 的值和score.xml的样式,重新生成score2.xml。
 <student>
    <name>Tom</name>
    <subject>math</subject>
     <score>80</score>
</student>

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

import com.google.gson.Gson;
import com.google.gson.JsonObject;

/**
 * 读入以下的score.xml文件,并转化为JSON  Object对象,输出JSON Object的字符串表达式。
 * 最后,根据JSON Object 的值和score.xml的样式,重新生成score2.xml。
 * <student>
  <name>Tom</name>
  <subject>math</subject>
  <score>80</score>
</student>
 * @author MSS
 *
 */

public class XToJToX {

	public static void main(String[] args) throws SAXException,IOException{
		XMLReader parser=XMLReaderFactory.createXMLReader();
    	StuHandler stuHandler=new StuHandler();
    	parser.setContentHandler(stuHandler);
    	parser.parse("score.xml");
    	Student stu=stuHandler.getStu();
    	Gson gson=new Gson();
    	JsonObject json=gson.toJsonTree(stu).getAsJsonObject();
        System.out.println(json);
        try {
    		DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newDefaultInstance();
    		DocumentBuilder dbBuilder=dbFactory.newDocumentBuilder();
    		
    		//新创建一个Document节点
    		Document document=dbBuilder.newDocument();
    		if(document !=null) {
    			Element student=document.createElement("student"); //都是采用student创建元素
    			
    			Element name=document.createElement("name");
    			Element subject=document.createElement("subject");
    			Element score=document.createElement("score");
    			name.appendChild(document.createTextNode(stu.getName()));  //给name节点赋值
    			subject.appendChild(document.createTextNode(stu.getSubject())); //给subject节点赋值
    			score.appendChild(document.createTextNode(stu.getScore())); //给score节点赋值
    			student.appendChild(name);   //把name节点挂在student下
    			student.appendChild(subject);   //把subject节点挂在student下
    		    student.appendChild(score); //把score节点挂在student下
    		    document.appendChild(student);
    			
    			TransformerFactory transformerFactory=TransformerFactory.newInstance();
    			Transformer transformer=transformerFactory.newTransformer();
    			DOMSource source=new DOMSource(document);
    			
    			//定义目标文件
    			File file=new File("score2.xml");
    			StreamResult result=new StreamResult(file);
    			
    			//将xml内容写入到文件中
    			transformer.transform(source, result);
    			System.out.println("write xml file successfully");
    		}
    	}catch(Exception ex) {
    		ex.printStackTrace();
    	}
	}
	

}
class StuHandler extends DefaultHandler{

	private boolean name=false;
	private boolean subject=false;
	private boolean score=false;
	int sco=0;
	Student stu=new Student();

	public Student getStu() {
		return stu;
	}
	//xml文档加载时
	public void startDocument() throws SAXException{
		System.out.println("Star parsing document...");
	}
	//文档解析结束
	public void endDocument() throws SAXException{
		System.out.println(stu.getName()+" "+stu.getSubject()+" "+stu.getScore());
		System.out.println("end");
	}
	//访问某一个元素
	public void startElement(String uri,String localName,String qName,Attributes atts)throws SAXException{
		if(qName.equals("name")) {
			name=true;
		}
		if(qName.equals("subject")) {
			subject=true;
		}
		if(qName.equals("score")) {
			score=true;
		}
	}
	//结束访问元素
	public void endElement(String namespaceURI,String localName,String qName)throws SAXException{
		if(name) {
			name=false;
		}
		if(subject) {
			subject=false;
		}
		if(score) {
			score=false;
		}
	}
	//访问元素正文
	public void characters(char[] ch,int start,int length) {
		if(name) {
			String name=new String(ch,start,length);
			stu.setName(name);
			}
		if(subject) {
			String subject=new String(ch,start,length);
			stu.setSubject(subject);
			}
		if(score) {
			String score=new String(ch,start,length);
			
			stu.setScore(score);
			}
		
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值