题目:读入以下的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);
}
}
}