求助:怎样把一个已生成的org.w3c.dom.document写入XML文件中??

时间:2021-10-29 14:18:33
我用xml4j.jar中的org.w3c.dom.document生成了一个document在内存中,有比较通用的方法把一次性写入到新的XML文件中么(或者说是跟据这个document生成一个XML文件)?如果有好的解决办法,给高分,不够我开贴再加,在线等待

4 个解决方案

#1


TransformerFactory tFactory=TransformerFactory.newInstance();
Transformer transformer=tFactory.newTransformer();
//设置输出的encoding为改变gb2312

transformer.setOutputProperty("encoding","gb2312"); 
DOMSource source= new DOMSource(doc);

StreamResult result = new StreamResult("test.xml");
transformer.transform(source,result);
}catch(javax.xml.transform.TransformerConfigurationException e){
e.printStackTrace();
System.out.println(e.getMessage());
return 3;//写文件错误

#2


得,我给你个完全的吧

操作xml包括读取,添加,删除,修改节点
上个文档只提供了xml的读取,添加功能,这里给出全面的解决方案


import javax.xml.transform.dom.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult  ;
import javax.xml.transform.stream.StreamSource  ;
import javax.xml.transform.dom.*;

import java.util.*;
import java.io.*;

public class DomReadDR{
DocumentBuilderFactory factory;
DocumentBuilder builder;
Document doc;

public DomReadDR()throws Exception{
factory=DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
doc = builder.parse("test.xml");
}
public void Read() throws Exception{
doc.normalize();
NodeList links=doc.getElementsByTagName("song");
for(int i=0;i<links.getLength();i++){
Element link = (Element)links.item(i);
System.out.println(link.getElementsByTagName("name").item(0).
getFirstChild().getNodeValue());
System.out.println(link.getElementsByTagName("music-by").item(0).
getFirstChild().getNodeValue());
}
}
//替换节点
public int replaceNode(String nodeID,String nodeValue){

doc.normalize();
NodeList links=doc.getElementsByTagName("song");
//查找要替换的Node
boolean blfindNode=false;
Element link=null;
for(int i=0;i<links.getLength();i++){
link = (Element)links.item(i);
if((link.getElementsByTagName("mId").item(0).getFirstChild().getNodeValue()).trim().equals(nodeID)){
blfindNode=true;
link.getElementsByTagName("music-by").item(0).getFirstChild().setNodeValue(nodeValue);//替换node的内容
break;
}
}
if (!blfindNode)
{
return 1;//没有找到合适的节点
}
try{
TransformerFactory tFactory=TransformerFactory.newInstance();
Transformer transformer=tFactory.newTransformer();
//设置输出的encoding为改变gb2312
transformer.setOutputProperty("encoding","gb2312"); 
DOMSource source= new DOMSource(doc);
StreamResult result = new StreamResult("test.xml");
transformer.transform(source,result);
}catch(javax.xml.transform.TransformerConfigurationException e){
e.printStackTrace();
System.out.println(e.getMessage());
return 3;//写文件错误
}catch(javax.xml.transform.TransformerException ex){
ex.printStackTrace();
return 3;
}
return 0;//替换成功
}
//删除节点
public int deleteNode(String nodeID){

doc.normalize();
NodeList links=doc.getElementsByTagName("song");
//查找要替换的Node
boolean blfindNode=false;
Element link=null;
for(int i=0;i<links.getLength();i++){
link = (Element)links.item(i);
if((link.getElementsByTagName("mId").item(0).getFirstChild().getNodeValue()).trim().equals(nodeID)){
blfindNode=true;
try{
link.getParentNode().removeChild(link);
}catch(DOMException e){
e.printStackTrace();
return 2;//Dom错误
}
break;
}
}

if (!blfindNode)
{
return 1;//没有找到合适的节点
}
try{
TransformerFactory tFactory=TransformerFactory.newInstance();
Transformer transformer=tFactory.newTransformer();
//设置输出的encoding为改变gb2312

transformer.setOutputProperty("encoding","gb2312"); 
DOMSource source= new DOMSource(doc);

StreamResult result = new StreamResult("test.xml");
transformer.transform(source,result);
}catch(javax.xml.transform.TransformerConfigurationException e){
e.printStackTrace();
System.out.println(e.getMessage());
return 3;//写文件错误
}catch(javax.xml.transform.TransformerException ex){
ex.printStackTrace();
return 3;
}
return 0;//替换成功
}

//添加节点
public void addNode(String mId,String name,String musicby){
Text textseg;
Element link = doc.createElement("song");

Element emId = doc.createElement("mId");
textseg=doc.createTextNode(mId);
emId.appendChild(textseg);
link.appendChild(emId);

Element ename = doc.createElement("name");
textseg=doc.createTextNode(name);
ename.appendChild(textseg);
link.appendChild(ename);


Element emusicby = doc.createElement("music-by");
textseg = doc.createTextNode(musicby);
emusicby.appendChild(textseg);
link.appendChild(emusicby);

Element root = doc.getDocumentElement();
root.normalize();
root.appendChild(link);

System.out.println(doc.getDoctype());
try{

TransformerFactory tFactory=TransformerFactory.newInstance();
Transformer transformer=tFactory.newTransformer();
//设置输出的encoding为改变gb2312

transformer.setOutputProperty("encoding","gb2312"); 
DOMSource source= new DOMSource(doc);
StreamResult result = new StreamResult("test.xml");
transformer.transform(source,result);
}catch(javax.xml.transform.TransformerConfigurationException e){
e.printStackTrace();
System.out.println(e.getMessage());
}catch(javax.xml.transform.TransformerException ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
try{
DomReadDR dr = new DomReadDR();
dr.Read();
//dr.addNode("5","卡本特1","yestodayfdgdrtyrtyrtyrtyfgdfgdfgdfg once more");
System.out.println(dr.replaceNode("4","天上人间第死的克己复礼亏损大家法律亏损代理费"));
System.out.println(dr.deleteNode("1"));
}catch(Exception e){
System.out.println(e.getMessage());
}
}

}

#3


不是啊,我不要细节实现,我的需求是,提供一个docment和一个文件名就能输出到文件,是一个通用的方法,你给的这个我早看过了,不行的

#4


谢谢,结帐

#1


TransformerFactory tFactory=TransformerFactory.newInstance();
Transformer transformer=tFactory.newTransformer();
//设置输出的encoding为改变gb2312

transformer.setOutputProperty("encoding","gb2312"); 
DOMSource source= new DOMSource(doc);

StreamResult result = new StreamResult("test.xml");
transformer.transform(source,result);
}catch(javax.xml.transform.TransformerConfigurationException e){
e.printStackTrace();
System.out.println(e.getMessage());
return 3;//写文件错误

#2


得,我给你个完全的吧

操作xml包括读取,添加,删除,修改节点
上个文档只提供了xml的读取,添加功能,这里给出全面的解决方案


import javax.xml.transform.dom.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult  ;
import javax.xml.transform.stream.StreamSource  ;
import javax.xml.transform.dom.*;

import java.util.*;
import java.io.*;

public class DomReadDR{
DocumentBuilderFactory factory;
DocumentBuilder builder;
Document doc;

public DomReadDR()throws Exception{
factory=DocumentBuilderFactory.newInstance();
builder = factory.newDocumentBuilder();
doc = builder.parse("test.xml");
}
public void Read() throws Exception{
doc.normalize();
NodeList links=doc.getElementsByTagName("song");
for(int i=0;i<links.getLength();i++){
Element link = (Element)links.item(i);
System.out.println(link.getElementsByTagName("name").item(0).
getFirstChild().getNodeValue());
System.out.println(link.getElementsByTagName("music-by").item(0).
getFirstChild().getNodeValue());
}
}
//替换节点
public int replaceNode(String nodeID,String nodeValue){

doc.normalize();
NodeList links=doc.getElementsByTagName("song");
//查找要替换的Node
boolean blfindNode=false;
Element link=null;
for(int i=0;i<links.getLength();i++){
link = (Element)links.item(i);
if((link.getElementsByTagName("mId").item(0).getFirstChild().getNodeValue()).trim().equals(nodeID)){
blfindNode=true;
link.getElementsByTagName("music-by").item(0).getFirstChild().setNodeValue(nodeValue);//替换node的内容
break;
}
}
if (!blfindNode)
{
return 1;//没有找到合适的节点
}
try{
TransformerFactory tFactory=TransformerFactory.newInstance();
Transformer transformer=tFactory.newTransformer();
//设置输出的encoding为改变gb2312
transformer.setOutputProperty("encoding","gb2312"); 
DOMSource source= new DOMSource(doc);
StreamResult result = new StreamResult("test.xml");
transformer.transform(source,result);
}catch(javax.xml.transform.TransformerConfigurationException e){
e.printStackTrace();
System.out.println(e.getMessage());
return 3;//写文件错误
}catch(javax.xml.transform.TransformerException ex){
ex.printStackTrace();
return 3;
}
return 0;//替换成功
}
//删除节点
public int deleteNode(String nodeID){

doc.normalize();
NodeList links=doc.getElementsByTagName("song");
//查找要替换的Node
boolean blfindNode=false;
Element link=null;
for(int i=0;i<links.getLength();i++){
link = (Element)links.item(i);
if((link.getElementsByTagName("mId").item(0).getFirstChild().getNodeValue()).trim().equals(nodeID)){
blfindNode=true;
try{
link.getParentNode().removeChild(link);
}catch(DOMException e){
e.printStackTrace();
return 2;//Dom错误
}
break;
}
}

if (!blfindNode)
{
return 1;//没有找到合适的节点
}
try{
TransformerFactory tFactory=TransformerFactory.newInstance();
Transformer transformer=tFactory.newTransformer();
//设置输出的encoding为改变gb2312

transformer.setOutputProperty("encoding","gb2312"); 
DOMSource source= new DOMSource(doc);

StreamResult result = new StreamResult("test.xml");
transformer.transform(source,result);
}catch(javax.xml.transform.TransformerConfigurationException e){
e.printStackTrace();
System.out.println(e.getMessage());
return 3;//写文件错误
}catch(javax.xml.transform.TransformerException ex){
ex.printStackTrace();
return 3;
}
return 0;//替换成功
}

//添加节点
public void addNode(String mId,String name,String musicby){
Text textseg;
Element link = doc.createElement("song");

Element emId = doc.createElement("mId");
textseg=doc.createTextNode(mId);
emId.appendChild(textseg);
link.appendChild(emId);

Element ename = doc.createElement("name");
textseg=doc.createTextNode(name);
ename.appendChild(textseg);
link.appendChild(ename);


Element emusicby = doc.createElement("music-by");
textseg = doc.createTextNode(musicby);
emusicby.appendChild(textseg);
link.appendChild(emusicby);

Element root = doc.getDocumentElement();
root.normalize();
root.appendChild(link);

System.out.println(doc.getDoctype());
try{

TransformerFactory tFactory=TransformerFactory.newInstance();
Transformer transformer=tFactory.newTransformer();
//设置输出的encoding为改变gb2312

transformer.setOutputProperty("encoding","gb2312"); 
DOMSource source= new DOMSource(doc);
StreamResult result = new StreamResult("test.xml");
transformer.transform(source,result);
}catch(javax.xml.transform.TransformerConfigurationException e){
e.printStackTrace();
System.out.println(e.getMessage());
}catch(javax.xml.transform.TransformerException ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
try{
DomReadDR dr = new DomReadDR();
dr.Read();
//dr.addNode("5","卡本特1","yestodayfdgdrtyrtyrtyrtyfgdfgdfgdfg once more");
System.out.println(dr.replaceNode("4","天上人间第死的克己复礼亏损大家法律亏损代理费"));
System.out.println(dr.deleteNode("1"));
}catch(Exception e){
System.out.println(e.getMessage());
}
}

}

#3


不是啊,我不要细节实现,我的需求是,提供一个docment和一个文件名就能输出到文件,是一个通用的方法,你给的这个我早看过了,不行的

#4


谢谢,结帐