JAVA生成XML文件

吴锦波 2011-12-15 03:54:52
假如有以下两个实例,怎么样把这两个实例以SAX、DOM两种方式输出到XML文件里呢?请各位大侠多多指教。

package basic.tech;

public class Person {
String name ;
int age ;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}

public static void main(String[] args) {
Person p1 = new Person("Tom",20);
Person p2 = new Person("Jack",20);
//如何用SAX技术把两个实例写到XML文件?

//如何用DOM技术把这两实例写到XML文件?
}
}

...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyuhua0066 2011-12-16
  • 打赏
  • 举报
回复
jox挺好用的
aaaa8215 2011-12-16
  • 打赏
  • 举报
回复
jdom

SAXBuilder builder = new SAXBuilder();
Document doc = builder.build("src/xml/po.xml"); //获得文档对象
Element root = doc.getRootElement(); //获得根节点

//添加新元素
Element element = new Element("person");
Element element1 = new Element("username");
element1.setText("zhangdaihao");
Element element2 = new Element("password");
element2.setText("mima");
element.addContent(element1);
element.addContent(element2);
root.addContent(element);
doc.setRootElement(root);

//文件处理
XMLOutputter out = new XMLOutputter();
out.output(doc, new FileOutputStream("src/xml/po.xml"));



zhijunwoo 2011-12-15
  • 打赏
  • 举报
回复
您好!生成、解析Xml的方式一共有四种,分别为Dom,Sax,Dom4j,Jdom.

对于您以上的要求我就只给出生成xml的。解析要有兴趣了也可以找些资料自己研究研究。

Dom生成、解析:优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

public static void main(String[] args) {
String fileName = "file/ccperson.xml";
createXml(fileName);
}

public static void createXml(String fileName) {

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElement("person");
doc.appendChild(root);

Element p1 = doc.createElement("p1");
p1.setAttribute("age", "20");
p1.setAttribute("name", "Tom");
root.appendChild(p1);

Element p2 = doc.createElement("p2");
p2.setAttribute("age", "20");
p2.setAttribute("name", "Jack");
root.appendChild(p2);

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
DOMSource source = new DOMSource(doc);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
StreamResult result = new StreamResult(pw);
transformer.transform(source, result);
System.out.println("生成XML文件成功!");

} catch (ParserConfigurationException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}

结果成功!

Sax生成、解析:优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
public static void main(String[] args) {
String fileName = "file/ccSax.xml";
createXml(fileName);
}

public static void createXml(String fileName) {

// 创建SAX转换工厂
SAXTransformerFactory sff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();

// 转换处理器,侦听 SAX ContentHandler
// 解析事件,并将它们转换为结果树 Result
TransformerHandler th = null;
Transformer transformer = null;
try {
th = sff.newTransformerHandler();
// 将源树转换为结果树
transformer = th.getTransformer();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
}
// 设置字符编码
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// 是否缩进
transformer.setOutputProperty(OutputKeys.INDENT, "yes");

StringWriter writerStr = new StringWriter();
Result resultStr = new StreamResult(writerStr);
//setResult() 必须在 startDocument() 之前调用
th.setResult(resultStr);

String xmlStr = null;
try {
th.startDocument();
AttributesImpl attr = new AttributesImpl();
th.startElement("", "", "person", attr);

th.startElement("", "", "p1", attr);
th.startElement("", "", "name", attr);
String name = "Tom";
th.characters(name.toCharArray(), 0, name.length());
th.endElement("", "", "name");

th.startElement("", "", "age", attr);
String age = "23";
th.characters(age.toCharArray(), 0, age.length());
th.endElement("", "", "age");
th.endElement("", "", "p1");

th.startElement("", "", "p2", attr);
th.startElement("", "", "name", attr);
name = "Jack";
th.characters(name.toCharArray(), 0, name.length());
th.endElement("", "", "name");

th.startElement("", "", "age", attr);
age = "30";
th.characters(age.toCharArray(), 0, age.length());
th.endElement("", "", "age");
th.endElement("", "", "p2");

th.endElement("", "", "person");
th.endDocument();
} catch (SAXException e) {
e.printStackTrace();
}
xmlStr = writerStr.getBuffer().toString();
System.out.println(xmlStr);
System.out.println("xml文件生成成功!");

}


Dom4j生成、解析:DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件
public static void main(String[] args) {
String fileName = "file/ccuser.xml";
Document doc = createXml(fileName);
System.out.println(doc.asXML());
System.out.println("-----------------------------------");
parseXml(doc);
}

public static Document createXml(String fileName){

Document doc = DocumentHelper.createDocument();
Element ccUsers = doc.addElement("ccUsers");
Element employees = ccUsers.addElement("employees");
employees.addAttribute("name", "employeeList");
Element employee = employees.addElement("employee");
employee.addAttribute("name", "zhijun");
employee.addAttribute("age", "22");
employee.addAttribute("hobbie", "basketball");

employee = employees.addElement("employee");
employee.addAttribute("name", "you");
employee.addAttribute("age", "22");
employee.addAttribute("hobbie", "football");

Element users = ccUsers.addElement("users");
users.addAttribute("name", "userList");
users.addAttribute("method", "getName");
Element user = users.addElement("user");
Element name = user.addElement("name");
name.setText("wei");
Element age = user.addElement("age");
age.setText("23");
Element hobbie = user.addElement("hobbie");
hobbie.setText("foot");

user = users.addElement("user");
name = user.addElement("name");
name.setText("mei");
age = user.addElement("age");
age.setText("19");
hobbie = user.addElement("hobbie");
hobbie.setText("song");

try {
OutputFormat format = OutputFormat.createPrettyPrint(); //缩减型
// OutputFormat format = OutputFormat.createCompactFormat();//紧凑型格式
Writer w = new FileWriter(fileName);
XMLWriter xmlWriter = new XMLWriter(w,format);
xmlWriter.write(doc);
xmlWriter.close();

} catch (IOException e) {
e.printStackTrace();
}
return doc;
}

Jdom生成、解析:为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
由于我没jdom的jar包。此方式就不给你写了。

最后,祝你学习越快!
qq931226110 2011-12-15
  • 打赏
  • 举报
回复
直接上代码:
public void CreateXmlTest() throws IOException,JDOMException {
Element root,rootIn, element, text;
Document Doc;
// 创建一个根目录
root = new Element("employees_information");
System.out.println(root);
// 把这个根目录放入XML文件中
Doc = new Document(root);
// 得到文档中的根目录
root = Doc.getRootElement();
System.out.println(root);

// 创建一个name的子对象
element = new Element("姓名");
// 设置他的值为"C.Y. Shen"
text = element.setText("陈浩");
// 设置name的一个属性emp_id并且给其赋值001
text = element.setAttribute("emp_id", "001");
// 用root将其加载到
element = root.addContent(text);

// 创建一个age的子对象
element = new Element("年龄");
text = element.setText("43");
element = root.addContent(text);
// 创建一个sex的子对象
element = new Element("性别");
text = element.setText("Male");
element = root.addContent(text);

// 创建XML输出的对象
XMLOutputter XMLOut = new XMLOutputter();
//XMLOut.setEncoding("gb2312");
XMLOut.output(Doc, new FileOutputStream("d://test1.xml"));
element=root.getChild("年龄");
root.removeContent(element);

}
softroad 2011-12-15
  • 打赏
  • 举报
回复
sax还没听过写xml呢。


public String toXML() {
StringBuffer xml = new StringBuffer("<?xml version="1.0" encoding="UTF-8"?>");
xml.append("<person>");
xml.append("<name>");
xml.append(name);
xml.append("</name>");
xml.append("<age>");
xml.append(age);
xml.append("</age>");
xml.append("</person>");
}

这是手工拼的,然后自己写入文件吧。
如果你懂反射的话,可以写个动态的。
aotian16 2011-12-15
  • 打赏
  • 举报
回复
只用过dom4j, 过来学习下
maven到底是什么?    Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具[百度百科]    这种又是大白话,如果没明白maven是什么,那么上面这句话跟没说一样,我自己觉得,Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,而这里pom.xml文件对于学了一点maven的人来说,就有些熟悉了,怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来?等等类似问题我们需要搞清楚,如果需要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目,maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)。    所以,根据上一段的描述,我们最终的目的就是学会如何在pom.xml中配置获取到我们想要的jar包,在此之前我们就必须了解如何创建maven项目,maven项目的结构是怎样,与普通java,web项目的区别在哪里,还有如何配置pom.xml获取到对应的jar包等等,这里提前了解一下我们如何通过pom.xml文件获取到想要的jar的,具体后面会详细讲解该配置文件。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧