java生成与解析xml

/**

* 创建xml文件、解析与生成xml文件

* @param  args

*/

public DocumentBuilder getDocumentBuilder(){

// 创建一个DocumentBUIDERfACTORY的对象

DocumentBuilderFactory def = DocumentBuilderFactory.newInstance();

// 创建一个DocumentBrilder对象

DocumentBuilder db = null;

try {

db = def.newDocumentBuilder();

} catch (ParserConfigurationException e) {

e.printStackTrace();

}

return db;

}

/**

* 生成xml文件

*/

public void createXML(){

DocumentBuilder db = getDocumentBuilder();

Document document = db.newDocument();

Element bookstore = document.createElement("bookStore");

for(int i = 1;i<=5;i++)

{

/**

* 节点类型 :NodeType  named constant nodename的返回值  nodeValue的返回值

* Element 1ELEMENT_NODEelement name null

* Attr   2ATTRIBUTE_NODE属性名称属性值

* Text   3 TEXT_NODE #test节点内容

*/

// 向bookstore 根节点中添加子节点book

Element book = document.createElement("book");

Element name = document.createElement("name");

Element price = document.createElement("price");

Element pubDate = document.createElement("pubDate");

book.setAttribute("id", i + "");

// name.setNodeValue("冰与火之歌");

/**

* Element 节点返回值为null

*/

// price.setNodeValue("12美元");

price.setTextContent("12美元");

name.setTextContent("冰与火之歌");

book.appendChild(pubDate);

book.appendChild(price);

book.appendChild(name);

// 将book节点添加到bookstore根节点中

bookstore.appendChild(book);

}

// 将bookstore节点(已经包含了book)添加到dom树中

document.appendChild(bookstore);

// 用来去掉xmlstandalone 属性

document.setXmlStandalone(true);

// 创建TransformerFactory 对象

TransformerFactory tff = TransformerFactory.newInstance();

try {

//创建Transformer对象

Transformer tf = tff.newTransformer();

tf.setOutputProperty(OutputKeys.INDENT, "yes");

//tf.setOutputProperty(OutputKeys.STANDALONE, "false");

tf.transform(new DOMSource(document),new StreamResult(new File("book1.xml")));

} catch (TransformerConfigurationException e) {

e.printStackTrace();

} catch (TransformerException e) {

e.printStackTrace();

}

System.out.println();

}

public void xmlParser(){

try {

DocumentBuilder db = getDocumentBuilder();

// 通过DocumentBuilder对象的parser方法加载books.xml文件到当前项目下

Document document = db.parse("books.xml");

// 获取所有book节点的集合

NodeList booklist = document.getElementsByTagName("book");

System.out.println("一共有" + booklist.getLength() + "本书");

for (int i = 0; i < booklist.getLength(); i++) {

// 桶过item(i)方法 获取一个book节点,nodelist的索引值从o开始

System.out.println("下面开始遍历第" + (i + 1) + "书的内容===========");

Node book = booklist.item(i);

// 获取book节点的所有属性的集合

NamedNodeMap attrs = book.getAttributes();

// 便利book的属性

System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength()

+ "个属性");

for (int j = 0; j < attrs.getLength(); j++) {

// 通过item方法获取book的每一个属性

Node attr = attrs.item(j);

// 获取属性名

System.out.println("属性名:" + attr.getNodeName());

System.out.println("属性值:" + attr.getNodeValue());

}

// 已知属性值的情况下可以用Element 类型进行强制类型转换和接收

// System.out.println("已知属性值的前提下遍历book节点的每一个属性");

// Element bk = (Element)booklist.item(i);

// String attrValue = bk.getAttribute("id");

// System.out.println("已知属性名的前提下进行遍历的结果"+attrValue);

// 遍历book节点的子节点

NodeList childNodes = book.getChildNodes();

// 遍历childNodes,目的获取每个节点的节点名和节点值

System.out.println("第" + (i + 1) + "本书工有"

+ childNodes.getLength() + "个子节点");

for (int k = 0; k < childNodes.getLength(); k++) {

// 遍历每一个子节点

// 获取了element类型节点的节点名

if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {

System.out.print("第" + (k + 1) + "个节点名:"

+ childNodes.item(k).getNodeName());

// System.out.println(childNodes.item(k).getNodeName());

// System.out.println(childNodes.item(k).getNodeValue());

// 获取element类型节点的节点值

System.out.println("--节点值是:"

+ childNodes.item(k).getFirstChild()

.getNodeValue());

// System.out.println("--节点值是:"+childNodes.item(k).getFirstChild().getTextContent());

}

}

System.out.println("结束遍历第" + (i + 1) + "书的内容===========");

}

// booklist.getLength();

}catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

/**

* 测试

* @param  args

*/

public static void main(String[] args) {

DOMTest dtest = new DOMTest();

dtest.createXML();

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏指尖下的Android

二进制的运算

在计算机中存储字节是定长的,即我们8、16、32位等等,6的二进制位为110,但如果在8位计算机中是00000110,高位补零

1773
来自专栏技术碎碎念

dom4j 使用总结

dom4j是一个Java的XML API,类似于jdom,用来读写XML文件 dom4j的使用方法简单总结来说如下: ①可以创建一个新的xml文件 ②利用SAX...

3668
来自专栏技术小黑屋

为什么局部变量需要显式设置初始化值

我们在编程中,无时无刻地都在于方法打交道,而在方法中,我们很难不使用局部变量,比如我们有下面的这样一段很简单的代码

1274
来自专栏java学习

面试题61(关于继承多态的理解)

面试题61 2018年1月21日 ? 本期题目 (单选题)下列选项中哪一个是正确的? package Wangyi; class Base{ publi...

2915
来自专栏ShaoYL

OC正则表达式的简单使用

34513
来自专栏一个会写诗的程序员的博客

《Kotlin 程序设计》第三章 Kotlin 类型系统第三章 Kotlin 类型系统基本数据类型2.字符类型CharKotlin类型系统参考资料

对象是带有属性和方法的特殊数据类型。笔者记得,在大学时候,学习C语言的结构体struct的时候,里面介绍过ADT(Abstract Data Type, 抽象数...

1003
来自专栏阮一峰的网络日志

字符串匹配的Boyer-Moore算法

上一篇文章,我介绍了KMP算法。 但是,它并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法...

2683
来自专栏Java编程

Java习惯用法总结

在Java编程中,有些知识 并不能仅通过语言规范或者标准API文档就能学到的。在本文中,我会尽量收集一些最常用的习惯用法,特别是很难猜到的用法。(Joshua ...

1.1K3
来自专栏一个会写诗的程序员的博客

《Kotlin极简教程》第四章 Kotlin基础语法表达式Null Check循环枚举遍历Map拼接字符串基本类型

在Kotlin中,所有东西都是对象,所以我们可以调用成员函数和属性的任何变量对象。有些类型是内置的,他们的实现被优化过, 但是用户看起来他们就像普通的类. 本节...

1363
来自专栏一个会写诗的程序员的博客

Java 8中的Optional 类型与 Kotlin 中的可空类型Java 8中的Optional 类型与 Kotlin 中的可空类型Kotlin 中的可空类型《Kotlin极简教程》正式上架:

其中,我们使用 String? 同样表达了 Optional<String>的意思,相比之下,哪个更简单?

681

扫码关注云+社区