jaxp解析xml 对xml文件进行增删改查
发布时间:2020-12-16 06:06:24 所属栏目:百科 来源:网络整理
导读:Demo.java实现了5个功能 1. 读取某个标签的值 2. 打印所有xml标签 3. 获得某个标签的指定属性 4. 在指定节点后面增加标签 5. 给指定节点增加属性 删除功能跟增加差不多,只是用了不同的方法,本人就没有具体代码实现 book.xml ?xml version="1.0" encoding="
Demo.java实现了5个功能 删除功能跟增加差不多,只是用了不同的方法,本人就没有具体代码实现 book.xml <?xml version="1.0" encoding="UTF-8"?>
<书架>
<书>
<书名 name="base">Java基础</书名>
<作者>abc</作者>
<售价> 39.00元</售价>
</书>
<书>
<书名>Java进阶</书名>
<作者>abc</作者>
<售价> 88.88元</售价>
</书>
</书架>
Demo.java package learn.java.xml;
import java.io.FileOutputStream;
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.w3c.dom.Node;
import org.w3c.dom.NodeList;
// 用Jaxp解析xml
public class Demo {
public static void main(String[] args) throws Exception {
Demo demo = new Demo();
demo.read();
System.out.println("**********");
demo.readAll();
System.out.println("**********");
demo.readAttr();
// 添加
demo.add();
demo.setAttr();
}
// 读取第二本书的书名 Java进阶
public void read() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到Dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档
Document doc = builder.parse("src/book.xml");
NodeList list = doc.getElementsByTagName("书名");
Node node = list.item(1); // 第二本书的书名 Java进阶
String text = node.getTextContent();
System.out.println(text);
}
// 打印所有标签
public void readAll() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到Dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档
Document doc = builder.parse("src/book.xml");
// 得到根节点
Node root = doc.getElementsByTagName("书架").item(0);
list(root);
}
// 遍历所有节点
public void list(Node node) throws Exception {
if (node instanceof Element) { // 是标签类型,打印(有些节点不是标签)
System.out.println(node.getNodeName());
}
NodeList nodes = node.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++)
list(nodes.item(i));
}
// 获得某个标签的指定属性
public void readAttr() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到Dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档
Document doc = builder.parse("src/book.xml");
// 得到根节点
Node node = doc.getElementsByTagName("书名").item(0);
// Node类没有提供获得指定标签的方法
// 需要强制转换成Element(Node子类),它有获得指定属性的方法
Element elem = (Element) node;
String value = elem.getAttribute("name");
System.out.println(value);
}
// 在指定位置后面添加标签
public void add() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到Dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档
Document doc = builder.parse("src/book.xml");
// 创建节点
Element discount = doc.createElement("打折");
discount.setTextContent("9折");
// 把新节点挂到第一本书的"售价"标签之前上
Element book = (Element)doc.getElementsByTagName("书").item(0);
Node nodeBef = doc.getElementsByTagName("售价").item(0);
book.insertBefore(discount,nodeBef); // 前面节点 插到 后面节点 的 后面
// 保存到文件
TransformerFactory tfFactory = TransformerFactory.newInstance();
Transformer tf = tfFactory.newTransformer();
tf.transform(new DOMSource(doc),new StreamResult(new FileOutputStream("src/book.xml")));
}
// 添加标签属性
public void setAttr() throws Exception {
// 1.创建工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2.得到Dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 3.解析xml文档
Document doc = builder.parse("src/book.xml");
// 把新节点挂到第一本书的"售价"标签之前上
Element book = (Element)doc.getElementsByTagName("书名").item(1);
book.setAttribute("name","advanced");
// 保存到文件
TransformerFactory tfFactory = TransformerFactory.newInstance();
Transformer tf = tfFactory.newTransformer();
tf.transform(new DOMSource(doc),new StreamResult(new FileOutputStream("src/book.xml")));
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Super Flexible File Synchronizer 破解方法
- VB-图形绘制总结
- ruby-on-rails-3 – 如何使用Simple Form Bootstrap gem的i
- ruby-on-rails – rails – 使用Group_by时 – 如何获取索引
- solrconfig.xml 应用解析调优
- c# – 如何在asp.net核心中获取.resx文件字符串
- c# – app.config中的自由格式XML配置部分主体
- VB 连接AutoCad 模块代码
- 在Neo4j Cypher中通过ID删除关系的简单方法?
- ruby-on-rails – 如何在我的Gemfile中启用详细标志