Javax.xml.transform包中的Transformer类用于把代表Xml文件的Document对象转换成某种格式进行输出,例如把xml文件应用转换成HTML,利用这个对象,当然也可以把Document重新写出一个xml文件中去。
Transformer类通过transfor方法完成转换操作,该方法接受一个源和一个目的地:
Javax.xml.transform.DOMSource类关联要转换的document,
Javax.xml.transform.streamResult类对象来表示数据的目的地。
Transformer对象通过TransformerFactory获得
举例4:
删除<售价>18</售价> 节点
文件book.xml
<?xml version="1.0" encoding="UTF-8"?>
<图书>
<书>
<书名>西游记</书名>
<作者>吴承恩</作者>
<售价>18</售价>
<售价>19</售价>
</书>
<书>
<书名>三国演义</书名>
<作者>罗贯中</作者>
<售价>20</售价>
</书>
</图书>
方法一:
@Test
//删除节点
public void delete1() throws Exception {
// 得到工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文档
Document document = builder.parse("src/com/it/book.xml");
//得到删除的节点
Element reNode = (Element) document.getElementsByTagName("售价").item(0);
//得到删除节点的父亲节点
Element book = (Element) document.getElementsByTagName("书").item(0);
//删除父亲节点下的孩子节点
book.removeChild(reNode);
// 把更新后内存重新写到XML文档中去
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/com/it/book.xml")));
}
方法二:
@Test
//删除节点
public void delete2() throws Exception {
// 得到工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文档
Document document = builder.parse("src/com/it/book.xml");
//得到删除的节点
Element reNode = (Element) document.getElementsByTagName("售价").item(0);
//删除父亲节点下的孩子节点
reNode.getParentNode().removeChild(reNode);
// 把更新后内存重新写到XML文档中去
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/com/it/book.xml")));
}
运行结果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><图书>
<书>
<书名 name="dddd">西游记</书名>
<作者>吴承恩</作者>
<售价>19</售价>
</书>
<书>
<书名>三国演义</书名>
<作者>罗贯中</作者>
<售价>20</售价>
</书>
</图书>
举例5:删除第一本书全部节点
@Test
//删除节点
public void delete3() throws Exception {
// 得到工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文档
Document document = builder.parse("src/com/it/book.xml");
//得到删除的节点
Element reNode = (Element) document.getElementsByTagName("售价").item(0);
//删除爷爷节点下的父亲节点
reNode.getParentNode().getParentNode().removeChild(reNode.getParentNode());
// 把更新后内存重新写到XML文档中去
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/com/it/book.xml")));
}
运行结果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><图书>
<书>
<书名>三国演义</书名>
<作者>罗贯中</作者>
<售价>20</售价>
</书>
</图书>
举例6:删除全部节点
@Test
public void delete4() throws Exception {
// 得到工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文档
Document document = builder.parse("src/com/it/book.xml");
//得到删除的节点
Element reNode = (Element) document.getElementsByTagName("售价").item(0);
reNode.getParentNode().getParentNode().getParentNode().removeChild(reNode.getParentNode().getParentNode());
// 把更新后内存重新写到XML文档中去
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/com/it/book.xml")));
}
运行结果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
举例7:更新节点<售价>18</售价> 的值
@Test
public void update() throws Exception{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到DOM解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文档
Document document = builder.parse("src/com/it/book.xml");
//得到节点
Element reNode = (Element) document.getElementsByTagName("售价").item(0);
//更新节点上的值
reNode.setTextContent("21");
// 把更新后内存重新写到XML文档中去
TransformerFactory tffactory = TransformerFactory.newInstance();
Transformer tf = tffactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(
new FileOutputStream("src/com/it/book.xml")));
}
运行结果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><图书>
<书>
<书名>西游记</书名>
<作者>吴承恩</作者>
<售价>21</售价>
</书>
<书>
<书名>三国演义</书名>
<作者>罗贯中</作者>
<售价>20</售价>
</书>
</图书>
分享到:
相关推荐
程序通过实现这些事件接口,对解析过程进行控制,从而实现对XML内容的处理。这种方法的优点在于内存占用小,适用于处理大型XML文件。 接下来,我们来看看如何在Java中使用JAXP的SAX解析器。首先,确保引入了JAXP...
本文将深入探讨XML的解析方式之一——JAXP(Java API for XML Processing),并提供一个简单的JAXP解析XML项目的概述。 ### JAXP简介 JAXP是Java平台上的标准API,它提供了处理XML的两种主要方法:解析和转换。在...
在Java中,处理XML文档时,Java API for XML Parsing(JAXP)是一个核心工具集,它提供了在Java环境中解析XML的接口和类。 **XML的基本概念** XML文档由元素、属性、文本和注释组成。元素是XML文档的基本构建块,...
J2ME版本的JAXP通常只包含XML解析器,用于读取和解析XML文档,而不包括XSLT(XML样式表转换)和DOM(文档对象模型)处理。在J2ME中,我们通常使用SAX(Simple API for XML)解析器,它是一种事件驱动的解析方法,...
### 使用JAXP处理XML文件的关键知识点 #### JAXP简介 JAXP(Java API for XML Processing)是Java平台中处理XML文档的标准API之一。它主要包括两大块:DOM(Document Object Model)和SAX(Simple API for XML)。...
二、XML解析方式 1. DOM解析:Document Object Model(DOM)解析器将整个XML文档加载到内存中,形成一棵元素树,便于遍历和修改。这种方式适合小到中型的XML文件,因为内存消耗较大。 2. SAX解析:Simple API for ...
**Xerces-1.4.3 XML解析器详解**...无论是需要全面的DOM解析,还是高效的SAX处理,或者通过JAXP集成XML解析,Xerces都能提供稳定且高效的支持。其开源性质和广泛的社区支持也使得它成为了XML处理领域不可或缺的一部分。
本文对四种主流的 XML 文件解析方案进行了比较,包括 DOM(JAXP Crimson 解析器)、SAX(JAXP Crimson 解析器)、JDOM 和 dom4j。比较的结果表明,DOM 解析方式具有较高的解析速度,但占用较高的内存,而 SAX 解析...
DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时的强大工具。DOM4J的最大亮点在于其简洁易用的API...
**DOM4J——XML解析库详解** XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行...
JAXP不提供新的XML处理方式,而是对SAX(Simple API for XML)和DOM(Document Object Model)这两个流行的XML解析API进行了封装,使得它们的使用更加方便和统一。 **JAXP的基本概念** 1. **API与抽象层的区别** ...
- **概念**:JAXP是由Sun Microsystems(现已被Oracle收购)提供的标准Java API,用于统一管理不同的XML解析器,如xerces等。它为DOM和SAX提供了一个统一的接口,简化了切换不同解析器的过程。 - **优势**:使用...
XML解析是将XML文档转换为程序可以理解的数据结构的过程,这在Java编程中尤为重要。在Java中,有多种XML解析器,通常分为DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)...
它定义了如`javax.xml.parsers`和`javax.xml.transform`等包,供开发者创建XML解析器和转换器。`javax.xml.parsers.DocumentBuilderFactory`和`javax.xml.transform.TransformerFactory`分别是用于创建DOM解析器和...
JAXP则是Java平台的标准API,可以用来处理XML解析和转换。 3. **xml-apis.jar**:这个库包含了XML API的基本组件,包括了SAX和DOM的部分接口定义。它是许多XML解析器的基础,提供了与XML相关的标准Java接口,使得...
DOM4J是一个基于Java的高效XML解析库,它是对DOM和SAX API的一个简单而强大的封装。DOM4J提供了更简洁的API,使得XML的解析和操作更加容易。DOM4J已成为XML解析的一种流行选择。 ### 性能对比 不同解析方式之间的...
《深入解析JAXP:Sun的Java API for XML解析》 在探讨JAXP(Java API for XML Processing)这一主题时,我们需首先明确其在Java与XML领域中的定位与价值。JAXP并非旨在革新XML处理的方式,也不提供额外的语法分析...
为了在Java环境中处理XML文档,我们需要引入特定的jar包,这些jar包提供了XML解析的API。 在Java中,有两种主要的XML解析技术:DOM(Document Object Model)和SAX(Simple API for XML)。DOM将整个XML文档加载到...