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</售价>
</书>
</图书>