以下的代码适用于JDK1.4
/**
* Creates a new xml file.
* @param dest_file a <code>String</code> object, the file which we will create.
*/
private void creatNewDocument(String dest_file)
{
try
{
//create a new document
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation DOMImpl = builder.getDOMImplementation();
//System.out.println(DOMImpl.hasFeature("", "2.0"));
Document document = DOMImpl.createDocument(null, "EMPLOYEE", null);
Element root = document.getDocumentElement();
Text space = document.createTextNode("\n ");
root.appendChild(space);
Element element = document.createElement("NAME");
element.setAttribute("SEX", "male");
//document.appendChild(element);
Text name = document.createTextNode("Einstein");
element.appendChild(name);
root.appendChild(element);
//Write a document to a file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Source source = new DOMSource(document);
Transformer transformer = transformerFactory.newTransformer();
File file = new File(dest_file);
OutputStream bout = new FileOutputStream(dest_file);
OutputStreamWriter out = new OutputStreamWriter(bout, "ISO-8859-1");
Result result = new StreamResult(bout);
transformer.transform(source, result);
}
catch (ParserConfigurationException pce)
{
pce.printStackTrace();
}
catch (TransformerConfigurationException tce)
{
tce.printStackTrace();
}
catch (UnsupportedEncodingException uee)
{
uee.printStackTrace();
}
catch (TransformerException te)
{
te.printStackTrace();
}
catch (FileNotFoundException fnfe)
{
fnfe.printStackTrace();
}
}
/**
* Creates a new xml file.
* @param dest_file a <code>String</code> object, the file which we will create.
*/
private void creatNewDocument(String dest_file)
{
try
{
//create a new document
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation DOMImpl = builder.getDOMImplementation();
//System.out.println(DOMImpl.hasFeature("", "2.0"));
Document document = DOMImpl.createDocument(null, "EMPLOYEE", null);
Element root = document.getDocumentElement();
Text space = document.createTextNode("\n ");
root.appendChild(space);
Element element = document.createElement("NAME");
element.setAttribute("SEX", "male");
//document.appendChild(element);
Text name = document.createTextNode("Einstein");
element.appendChild(name);
root.appendChild(element);
//Write a document to a file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Source source = new DOMSource(document);
Transformer transformer = transformerFactory.newTransformer();
File file = new File(dest_file);
OutputStream bout = new FileOutputStream(dest_file);
OutputStreamWriter out = new OutputStreamWriter(bout, "ISO-8859-1");
Result result = new StreamResult(bout);
transformer.transform(source, result);
}
catch (ParserConfigurationException pce)
{
pce.printStackTrace();
}
catch (TransformerConfigurationException tce)
{
tce.printStackTrace();
}
catch (UnsupportedEncodingException uee)
{
uee.printStackTrace();
}
catch (TransformerException te)
{
te.printStackTrace();
}
catch (FileNotFoundException fnfe)
{
fnfe.printStackTrace();
}
}
/**
* Updates a xml file and write it to a new file.
* @param file_url a <code>String</code> object, the file which we will parse
*/
private void updateNewDocument(String file_url)
{
Document document = (Document) getDocument(file_url);
followNode(document);
try
{
TransformerFactory factory = TransformerFactory.newInstance();
Source source = new DOMSource(document);
Transformer transformer = factory.newTransformer();
File file = new File("C:/caike2/aaa.xml");
OutputStream bout = new FileOutputStream(file);
OutputStreamWriter out = new OutputStreamWriter(bout, "ISO-8859-1");
Result result = new StreamResult(bout);
transformer.transform(source, result);
}
// catch(ConfigurationException ce)
// {
// ce.printStackTrace();
// }
catch (TransformerConfigurationException tce)
{
tce.printStackTrace();
}
catch (IOException io)
{
io.printStackTrace();
}
catch (TransformerException te)
{
te.printStackTrace();
}
} /**
* Gets a xml document
* @param file_url a <code>String</code> object, the file which we will parse.
* @return
*/
private Node getDocument(String file_url)
{
Document document = null;
try
{
DOMParser parser = new DOMParser();
parser.parse(file_url);
document = parser.getDocument();
}
catch (IOException io)
{
io.printStackTrace();
}
catch (SAXException saxe)
{
saxe.printStackTrace();
}
return document;
} /**
* Analyses the xml document.
* @param node a <code>Node</code> object, which we will analyses
*/
private void followNode(Node node)
{
// try
// {
System.err.println("_______________begin_______________");
System.out.println(
"node name: " + node.getNodeName() + "\nnode type: " + node.getNodeType());
//////////////////////////
//增加一个新节点
//////////////////////////
Document owner = node.getOwnerDocument();
Node newNode = owner.createElement("Name");
node.appendChild(newNode);
//给新节点添加属性
newNode.setAttribute("SEX", "male");
//在新节点加入文本
Text name = document.createTextNode("Einstein");
newNode.append(name);
////////////////////////////
//添加节点结束
////////////////////////////
String value = node.getNodeValue();
if (value != null)
{
if (value.equals("3"))
{
Node parent = node.getParentNode();
parent.removeChild(node);
}
System.out.println(" value: -" + value + "-");
}
System.err.println("________________end_______________");
if (node.hasChildNodes())
{
Node firstNode = node.getFirstChild();
followNode(firstNode);
}
Node nextNode = node.getNextSibling();
if (nextNode != null)
{
//System.out.println("nextNode is not null");
followNode(nextNode);
}
// }
// catch(DOMException dom)
// {
// dom.printStackTrace();
// }
}
<?xml version="1.0" encoding="UTF-8"?>
<EMPLOYEE>
<NAME SEX="male">Einstein</NAME></EMPLOYEE>怎样让</EMPLOYEE>换行?
http://www-900.ibm.com/developerworks/cn/xml/index.shtml
里面有几篇IBM的文章,讲得不错。
修改如下:
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer; /**
* Creates a new xml file.
* @param dest_file a <code>String</code> object, the file which we will create.
*/
private void creatNewDocument(String dest_file)
{
try
{
//create a new document
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation DOMImpl = builder.getDOMImplementation();
//System.out.println(DOMImpl.hasFeature("", "2.0"));
Document document = DOMImpl.createDocument(null, "EMPLOYEE", null);
Element root = document.getDocumentElement();
Text space = document.createTextNode("\n ");
root.appendChild(space);
for (int i = 0; i < 5; i++)
{
Element element = document.createElement("NAME");
element.setAttribute("SEX", "male");
//document.appendChild(element);
Text name = document.createTextNode("Einstein" + i);
element.appendChild(name);
root.appendChild(element);
}
//Write a document to a file
//TransformerFactory transformerFactory = TransformerFactory.newInstance();
//Source source = new DOMSource(document);
//Transformer transformer = transformerFactory.newTransformer();
File file = new File(dest_file);
OutputStream bout = new FileOutputStream(dest_file);
OutputStreamWriter out = new OutputStreamWriter(bout, "ISO-8859-1");
//Result result = new StreamResult(bout);
//transformer.transform(source, result); //xerces write a document to a file
OutputFormat format = new OutputFormat(document);
//是否缩进
format.setIndenting(true);
//设置每行的字符数
format.setLineWidth(50);
//设置每行缩进的字符数
format.setIndent(4);
//序列化
XMLSerializer serializer = new XMLSerializer(bout, format);
//把xml文档写入指定的文件
serializer.serialize(document);
out.flush();
out.close();
bout.close();
}
catch (ParserConfigurationException pce)
{
pce.printStackTrace();
}
// catch (TransformerConfigurationException tce)
// {
// tce.printStackTrace();
// }
catch (UnsupportedEncodingException uee)
{
uee.printStackTrace();
}
// catch (TransformerException te)
// {
// te.printStackTrace();
// }
catch (FileNotFoundException fnfe)
{
fnfe.printStackTrace();
}
catch(IOException io)
{
io.printStackTrace();
}
}
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.xml.utils.WrappedRuntimeException: The output format must have a '{http://xml.apache.org/xalan}content-handler' property!
at org.apache.xalan.serialize.SerializerFactory.getSerializer(SerializerFactory.java:142)
at org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.java:232)
at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:296)
at gissvr.ResXMLError.creatNewDocument(ResXMLError.java:139)
at gissvr.GISServlet.doPost(GISServlet.java:91)