其实用JAXP去解析XML文档离不开几个常用的工厂,
第一:DocumentBuilderFactory (文档解析器工厂)
这个工厂可以获得DocumentBuilder,文档解析器。
有了文档解析器就可以去解析我们的XML文件,db.parse("src/book.xml");
第二:TransformerFactory (转换器工厂)
这个工厂可以换的Transforme转换器,
有了转换器我们就可以tf.transform(DOMSource, StreamResult("src/book.xml"));
这样就可以实现了解析XML和对XML文档进行CURD操作了。
例如:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<书架>
<书>
<书名>魔鬼</书名>
<作者>蓝</作者>
<售价>20</售价>
<数量>30</数量>
</书>
</书架>
package com;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class JaxpTest {
public static void main(String[] args) throws Exception {
// 1.创建工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 2.通过工厂获得文档解析器。
DocumentBuilder db = dbf.newDocumentBuilder();
// 3.解析指定的dom文件,获得dom
Document dom = db.parse("src/book.xml");
NodeList nodes = dom.getElementsByTagName("书名");
System.out.println(nodes.getLength());
System.out.println(nodes.item(0).getTextContent());
Node node = dom.getElementsByTagName("书架").item(0);
list(node);
}
// 遍历所有节点
public static void list(Node node) {
System.out.println(node.getNodeName());
NodeList list = node.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Node child = list.item(i);
list(child);
}
}
// 增加节点
@Test
public void test1() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse("src/book.xml");
Node sum = (Node) dom.createElement("数量");
sum.setTextContent("30");
Node node = dom.getElementsByTagName("书").item(0);
node.appendChild(sum);
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.transform(new DOMSource(dom), new StreamResult("src/book.xml"));
}
//删除节点
@Test
public void test2() throws Exception{
//1.获得解析器工厂类
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.由工厂类获取解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3.由解析器去解析XML文档
Document document = db.parse("src/book.xml");
Node sumNode = (Node)document.getElementsByTagName("数量").item(0);
Node pNode = sumNode.getParentNode().getParentNode().getParentNode();
pNode.removeChild(sumNode.getParentNode().getParentNode());
//1.获得转换工厂
TransformerFactory tff = TransformerFactory.newInstance();
//2.获得转换器
Transformer tf = tff.newTransformer();
//3.执行转换工作
tf.transform(new DOMSource(document), new StreamResult("src/book.xml"));
}
//更新节点
@Test
public void test3() throws Exception{
//1.获得解析器工厂类
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.由工厂类获得解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3.由解析器去解析XML文档
Document document = db.parse("src/book.xml");
Node bookNode = document.getElementsByTagName("书").item(0);
bookNode.setTextContent("100");
//1.获得转换工厂类
TransformerFactory tff = TransformerFactory.newInstance();
//2.由工厂类获得转换器
Transformer tf = tff.newTransformer();
//3.由转化器去执行转换工作
tf.transform(new DOMSource(document), new StreamResult("src/book.xml"));
}
}
分享到:
相关推荐
以下是一个简单的JAXP解析XML文件的Java代码示例: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom....
使用JAXP解析XML文档的步骤大致如下: 1. 加载解析器工厂:`javax.xml.parsers.DocumentBuilderFactory`或`javax.xml.parsers.SAXParserFactory`。 2. 创建解析器:通过工厂的`newDocumentBuilder()`或`newSAXParser...
SAX解析器逐行读取XML文件,当遇到XML文档的各个元素、属性等结构时,会触发相应的事件回调,如开始文档、结束文档、开始元素、结束元素等。程序通过实现这些事件接口,对解析过程进行控制,从而实现对XML内容的处理...
- **SAXParser**:提供了一种基于事件的解析XML文档的方式,通常用于处理大文件或实时流数据。 - **DocumentBuilder**:用于构建DOM树,便于后续对文档的随机访问和修改。 ##### org.w3c.dom - 定义了DOM中的一系列...
通常,解析XML可能需要如`jaxp-1.3.jar`(Java API for XML Processing)、`xml-apis.jar`(XML API)、`sax.jar`(SAX解析器)或`dom4j.jar`(DOM4J库)等库。然而,提供的文件列表`Global.asax`、`gui.ascx`、`...
在 Java 中使用 DOM 方式解析 XML 文件需要使用 JAXP(Java API for XML Processing),首先需要创建一个解析器工厂,然后使用工厂创建一个具体的解析器对象。然后,使用解析器对象来解析 XML 文件,得到一个 ...
Java DOM 解析 XML 实例是 Java 语言中常用的 XML 解析方法之一,使用 W3C 推荐的文档对象模型(Document Object Model,DOM)来解析 XML 文档。DOM 提供了一个树形结构的对象模型,通过遍历树形结构可以访问和操作 ...
J2ME版本的JAXP通常只包含XML解析器,用于读取和解析XML文档,而不包括XSLT(XML样式表转换)和DOM(文档对象模型)处理。在J2ME中,我们通常使用SAX(Simple API for XML)解析器,它是一种事件驱动的解析方法,...
"java解析xml文档的常用方法" Java 解析 XML 文档的常用方法有四种:DOM、SAX、JDOM 和 DOM4J。下面对这四种方法进行详细的介绍: 1. 使用 DOM(JAXP Crimson 解析器) DOM(Document Object Model)是一种以层次...
在上述代码中,我们使用了JAXP(Java API for XML Processing)中的`DocumentBuilderFactory`和`DocumentBuilder`来创建并解析XML文件。`getElementsByTagName()`用于获取指定标签的节点列表,然后通过`item()`方法...
在Java中,解析XML文档有多种方式,其中DOM(Document Object Model)和SAX(Simple API for XML)是最常见的两种。DOM是一种基于树形结构的XML处理方式,它将整个XML文档加载到内存中,形成一个完整的对象模型,...
### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...
最后,“Chapter5 使用DOM、SAX和JAXP解析XML文档.ppt”和“Chapter5 使用DOM、SAX和JAXP解析XML文档.pptx”将介绍XML的解析方法。DOM(Document Object Model)是将整个XML文档加载到内存中形成一棵树状结构,方便...
XPath(XML Path Language)则是一种查询XML文档中节点的语言。使用Xalan,开发者可以编写XSLT样式表来转换XML数据,实现数据的格式化和筛选。 2. **xercesImpl.jar**:这个JAR包含了Apache Xerces的Java实现,...
`DocumentBuilderFactory`用于创建`DocumentBuilder`实例,而`DocumentBuilder`则负责解析XML文档并将其转换为DOM树结构。一旦DOM树构建完成,开发人员便可以通过`Node`、`Element`、`Attr`等接口访问树中的各个节点...
DOM4J是一个强大的Java库,专门用于解析XML文档。它提供了简单易用的API,使得开发者可以更加方便地处理XML数据。DOM4J的核心优势在于它的面向接口编程设计,这使得它能够在不同的解析机制间灵活切换,如DOM、SAX和...
day02_xml *demo01.App1\App2\App3 使用jaxp开发包中的SAX方式解析xml文档,该方式只能读取文档 *demo4j01.App dom4j CURD XML *domo4j.ex 对dom4j 的封装例子
- **创建解析器**:接着,我们使用`DocumentBuilderFactory`创建一个`DocumentBuilder`实例,该实例用于解析XML文档。 ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); ...
### 使用Digester解析XML文档示例 #### 一、Digester简介与应用场景 Digester是Apache Jakarta项目下的一个工具类库,它简化了基于SAX(Simple API for XML)的XML解析过程。Digester能够根据定义好的规则自动将...
DOM解析器如JAXP的Crimson,会一次性加载整个XML文档,因此对于小到中等大小的文档,DOM提供了方便的API进行数据访问和修改。但是,由于全量加载,对于大文件,DOM可能会消耗大量内存且解析速度较慢。 示例代码展示...