Java输出xml文件——DOM法写入《Dota…
2015-12-19 09:52
441 查看
本篇代码与之前的xml读取正好为反向的操作,前文中,将所有方法直接写在main()方法中,也可以写在外面,而在main()方法中调用。本文就以此方式来编写代码。
从本文代码中能看出来,由于不能直接使用递归和循环操作,使得输入文本类容的版块比较冗长繁琐,期待以后学习新知识来改善这一环节。
【代码如下】
package sina1_xml_dom;
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class DomTest {
public DocumentBuilder
getDocumentBuilder(){
//
创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
//创建一个DocumentBuilder对象
DocumentBuilder db = null;
try {
db =
dbf.newDocumentBuilder();
} catch
(ParserConfigurationException e) {
// TODO Auto-generated catch
block
e.printStackTrace();
}
return db;
}
public void createXML(){
DocumentBuilder db = getDocumentBuilder();
Document document = db.newDocument(); //创建文档
document.setXmlStandalone(true); //将standalone设为“yes”
Element Dota2 = document.createElement_x("Dota2"); //创建根节点
Element Hero = document.createElement_x("Hero"); //创建子节点
Element live = document.createElement_x("生命"); //创建
Element magic =
document.createElement_x("魔法");
Element strength =
document.createElement_x("力量");
Element agility =
document.createElement_x("敏捷");
Element wit =
document.createElement_x("智力");
Element initialAttack =
document.createElement_x("初始攻击");
Element initialArmor =
document.createElement_x("初始护甲");
Element attackRange =
document.createElement_x("攻击范围");
Element view =
document.createElement_x("视野");
Element movementSpeed =
document.createElement_x("移动速度");
Element trajectorySpeed =
document.createElement_x("弹道速度");
Element conjuryTime =
document.createElement_x("施法前后摇");
Element attackTime =
document.createElement_x("攻击前后摇");
live.setTextContent("454"); //由于setNodeValve()对于Element类型的返回值永远是null,故添加文本内容要用该方法
magic.setTextContent("273");
strength.setTextContent("16(+1.7)");
agility.setTextContent("16(+1.6)");
wit.setTextContent("18(+2.9)");
initialAttack.setTextContent("38-44");
initialArmor.setTextContent("1.24");
attackRange.setTextContent("600");
view.setTextContent("1800/800");
movementSpeed.setTextContent("280");
trajectorySpeed.setTextContent("900");
conjuryTime.setTextContent("0.3/2.4");
attackTime.setTextContent("0.55/0");
Hero.appendChild(live); //添加
Hero.appendChild(magic);
Hero.appendChild(strength);
Hero.appendChild(agility);
Hero.appendChild(wit);
Hero.appendChild(initialAttack);
Hero.appendChild(initialArmor);
Hero.appendChild(attackRange);
Hero.appendChild(view);
Hero.appendChild(movementSpeed);
Hero.appendChild(trajectorySpeed);
Hero.appendChild(conjuryTime);
Hero.appendChild(attackTime);
Hero.setAttribute("name", "水晶室女");
Dota2.appendChild(Hero); //向根节点中添加子节点
document.appendChild(Dota2); //将根节点(已包含Hero)添加到DOM树中
//创建xml文件
TransformerFactory tff = TransformerFactory.newInstance();
//创建工厂类型的变量不能用new,要用newInstance()
try {
Transformer tf = tff.newTransformer(); //创建Transformer对象
tf.setOutputProperty(OutputKeys.INDENT, "yes"); //yes代表换行操作
tf.transform(new DOMSource(document), new StreamResult(new
File("C:\\test\\Heros2.xml")));
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
DomTest test = new DomTest();
test.createXML();
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}
【运行结果如下】
82
打开 →
C:\\test\\Heros2.xml
<生命>454</生命>
<魔法>273</魔法>
<力量>16(+1.7)</力量>
<敏捷>16(+1.6)</敏捷>
<智力>18(+2.9)</智力>
<初始攻击>38-44</初始攻击>
<初始护甲>1.24</初始护甲>
<攻击范围>600</攻击范围>
<视野>1800/800</视野>
<移动速度>280</移动速度>
<弹道速度>900</弹道速度>
<施法前后摇>0.3/2.4</施法前后摇>
<攻击前后摇>0.55/0</攻击前后摇>
从本文代码中能看出来,由于不能直接使用递归和循环操作,使得输入文本类容的版块比较冗长繁琐,期待以后学习新知识来改善这一环节。
【代码如下】
package sina1_xml_dom;
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class DomTest {
public DocumentBuilder
getDocumentBuilder(){
//
创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
//创建一个DocumentBuilder对象
DocumentBuilder db = null;
try {
db =
dbf.newDocumentBuilder();
} catch
(ParserConfigurationException e) {
// TODO Auto-generated catch
block
e.printStackTrace();
}
return db;
}
public void createXML(){
DocumentBuilder db = getDocumentBuilder();
Document document = db.newDocument(); //创建文档
document.setXmlStandalone(true); //将standalone设为“yes”
Element Dota2 = document.createElement_x("Dota2"); //创建根节点
Element Hero = document.createElement_x("Hero"); //创建子节点
Element live = document.createElement_x("生命"); //创建
Element magic =
document.createElement_x("魔法");
Element strength =
document.createElement_x("力量");
Element agility =
document.createElement_x("敏捷");
Element wit =
document.createElement_x("智力");
Element initialAttack =
document.createElement_x("初始攻击");
Element initialArmor =
document.createElement_x("初始护甲");
Element attackRange =
document.createElement_x("攻击范围");
Element view =
document.createElement_x("视野");
Element movementSpeed =
document.createElement_x("移动速度");
Element trajectorySpeed =
document.createElement_x("弹道速度");
Element conjuryTime =
document.createElement_x("施法前后摇");
Element attackTime =
document.createElement_x("攻击前后摇");
live.setTextContent("454"); //由于setNodeValve()对于Element类型的返回值永远是null,故添加文本内容要用该方法
magic.setTextContent("273");
strength.setTextContent("16(+1.7)");
agility.setTextContent("16(+1.6)");
wit.setTextContent("18(+2.9)");
initialAttack.setTextContent("38-44");
initialArmor.setTextContent("1.24");
attackRange.setTextContent("600");
view.setTextContent("1800/800");
movementSpeed.setTextContent("280");
trajectorySpeed.setTextContent("900");
conjuryTime.setTextContent("0.3/2.4");
attackTime.setTextContent("0.55/0");
Hero.appendChild(live); //添加
Hero.appendChild(magic);
Hero.appendChild(strength);
Hero.appendChild(agility);
Hero.appendChild(wit);
Hero.appendChild(initialAttack);
Hero.appendChild(initialArmor);
Hero.appendChild(attackRange);
Hero.appendChild(view);
Hero.appendChild(movementSpeed);
Hero.appendChild(trajectorySpeed);
Hero.appendChild(conjuryTime);
Hero.appendChild(attackTime);
Hero.setAttribute("name", "水晶室女");
Dota2.appendChild(Hero); //向根节点中添加子节点
document.appendChild(Dota2); //将根节点(已包含Hero)添加到DOM树中
//创建xml文件
TransformerFactory tff = TransformerFactory.newInstance();
//创建工厂类型的变量不能用new,要用newInstance()
try {
Transformer tf = tff.newTransformer(); //创建Transformer对象
tf.setOutputProperty(OutputKeys.INDENT, "yes"); //yes代表换行操作
tf.transform(new DOMSource(document), new StreamResult(new
File("C:\\test\\Heros2.xml")));
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
DomTest test = new DomTest();
test.createXML();
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}
【运行结果如下】
82
打开 →
C:\\test\\Heros2.xml
<生命>454</生命>
<魔法>273</魔法>
<力量>16(+1.7)</力量>
<敏捷>16(+1.6)</敏捷>
<智力>18(+2.9)</智力>
<初始攻击>38-44</初始攻击>
<初始护甲>1.24</初始护甲>
<攻击范围>600</攻击范围>
<视野>1800/800</视野>
<移动速度>280</移动速度>
<弹道速度>900</弹道速度>
<施法前后摇>0.3/2.4</施法前后摇>
<攻击前后摇>0.55/0</攻击前后摇>
相关文章推荐
- Java读取xml文件——DOM解析《Dota2…
- 【Java EE 学习 75 下】【数据采集系统第七天】【二进制运算实现权限管理】【使用反射初始化权限表】【权限捕获拦截器动态添加权限】
- 菜鸟猿大战Java之集合框架系列(二)
- spring mvc拦截器
- java中字节数组与字符串,与数据之间的装换
- Eclipse中10个最有用的快捷键
- 详解Java的Hibernat框架中的Map映射与SortedMap映射
- Java内存简介
- removeAll throws java.lang.UnsupportedOperationException
- Mybatis3源码分析(07)-加载Configuration-总结
- java中的进制问题以及位运算
- Spring MVC+FreeMarker简介
- java求最大公约数(分解质因数)
- java 多线程 传参 并发处理
- java 多线程 两种实现方式
- AES加密时的 java.security.InvalidKeyException: Illegal key size 异常
- SpringMVC在Servlet3.0下上传文件的示例
- Java 备忘与总结
- 如何正确的挂起一个线程(为什么suspend被弃用)
- Java之MySQL 存储过程【整理】