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 条评论
登录 后参与评论

相关文章

来自专栏余林丰

Effective Java通俗理解(下)

第31条:用实例域代替序数   枚举类型有一个ordinal方法,它范围该常量的序数从0开始,不建议使用这个方法,因为这不能很好地对枚举进行维护,正确应该是利用...

1929
来自专栏LinXunFeng的专栏

iOS - 通过runtime获取某个类中所有的变量和方法

892
来自专栏ImportSource

Junit 5新特性全集

本文略长,但都是大白话,如果你能一口气看完,你赢了。 如果你来不及看这么长,那么建议你滑到文末,直接看黑体部分就知道大概了。 在5中的一个测试类的基本生命周期是...

43211
来自专栏Ryan Miao

Java8-理解Collector

2724
来自专栏程序员宝库

关于 Java 你不知道的 10 件事

作为 Java 书呆子,比起实用技能,我们会对介绍 Java 和 JVM 的概念细节更感兴趣。因此我想推荐 Lukas Eder 在 jooq.org 发表的原...

3526
来自专栏极客慕白的成长之路

JS实用技巧手记之六

除特别注明外,本站所有文章均为慕白博客原创,转载请注明出处来自https://geekmubai.com/programming/166.html

593
来自专栏Java技术栈

关于Java你不知道的10件事

作者: Lukas Eder 原文:10 Things You Didn’t Know About Java 来源:oschina 译文:www.oschina...

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

《Kotin 编程思想·实战》

Xtend是Eclipse推出的一个新的JVM语言,并无意替代Java,而是以己之长补Java之短,精简代码,无类型,改进可读和维护。Eclipse Xtend...

883
来自专栏好好学java的技术栈

一文看透java8新特性

毫无疑问,Java 8发行版是自Java 5(发行于2004,已经过了相当一段时间了)以来最具革命性的版本。Java 8 为Java语言、编译器、类库、开发工具...

712
来自专栏函数式编程语言及工具

深圳scala-meetup-20180902(1)- Monadic 编程风格

刚完成了9月份深圳scala-meetup,趁刮台风有空,把我在meetup里的分享在这里发表一下。我这次的分享主要分三个主题:“Monadic编程风格“、...

753

扫码关注云+社区