Jdom的Bug,你可以修改Jdom的Source,或者用我的方法:
public static void OutputDocToFile(Document doc, String xslpath,
String encoding, String filePath) {
//setup this like outputDocument
try {
XMLOutputter outputter = new XMLOutputter(" ", true, encoding);
FileWriter out = new FileWriter(filePath);
out.write("<?xml version=\"1.0\"");
if (encoding != null && encoding.length() > 1) {
//编码的名字至少有一个字符
out.write(" encoding=\"" + encoding + "\"");
}
out.write("?>");
if (xslpath != null && xslpath.length() > 3) {
//xsl 文件的名字至少有三个字符
out.write("<?xml-stylesheet type='text/xsl' href='" + xslpath + "'?>");
}
outputter.output(doc.getRootElement(), out);
out.close();
}
catch (java.io.IOException e) {
e.printStackTrace();
}
}
doc.addContent(pi);
import org.jdom.Namespace;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import java.io.FileInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.StringTokenizer;
import java.io.FileWriter;
import java.util.ArrayList;
public class xmlManager
{
private Document doc;
//导入xml文件
public void load(String xmlFile) throws IOException,
FileNotFoundException,JDOMException
{
SAXBuilder builder=new SAXBuilder();
doc=builder.build(new File(xmlFile));
}
//删除节点及其子节点(根/节点名称)
public boolean DelNode(String NodeStr)
{
StringTokenizer S=new StringTokenizer(NodeStr,"/");
if(!S.hasMoreTokens()){return false;} //如果没有字符串,返回
Element MyEle=doc.getRootElement();
String nodeStr;
while(S.hasMoreTokens()&&S.countTokens()>1)
{
nodeStr=S.nextToken();
MyEle=MyEle.getChild(nodeStr);
} return MyEle.removeChildren(S.nextToken());
}
//删除指定节点(根/节点名称,序号)
public boolean DelNode(String NodeStr,int id)
{
StringTokenizer S=new StringTokenizer(NodeStr,"/");
if(!S.hasMoreTokens()){return false;} //如果没有字符串,返回
Element MyEle=doc.getRootElement();
String nodeStr;
while(S.hasMoreTokens()&&S.countTokens()>1)
{
nodeStr=S.nextToken();
MyEle=MyEle.getChild(nodeStr);
}
return MyEle.removeContent((Element)MyEle.getChildren(S.nextToken()).get(id));
}
//添加节点(根/节点名称,字符串)
public void AddNode(ArrayList list) throws JDOMException,Exception
{
Element MyElement=doc.getRootElement();
//*******获取命名空间*******
Namespace rs=MyElement.getNamespace("xmlns:rs");
Namespace z=MyElement.getNamespace("xmlns:z");
MyElement=MyElement.getChild("data",rs);
//****获取元素命名空间*********
Element spaceElement=MyElement.getChild("row",z);
z=spaceElement.getNamespace();
MyElement.removeChildren("row",z);
displaySalesSlipBean dForm;
for(int i=0;i<list.size();i++)
{
dForm=(displaySalesSlipBean)list.get(i);
Element newNode=new Element("row");
newNode.setNamespace(z);
MyElement.addContent(newNode);
newNode.setAttribute("product_id",dForm.getProduct_id());
newNode.setAttribute("productName",dForm.getProductName());
newNode.setAttribute("barCode",dForm.getBarCode());
newNode.setAttribute("spec",dForm.getSpec());
newNode.setAttribute("price",String.valueOf(dForm.getPrice()));
newNode.setAttribute("unit",dForm.getUnit());
newNode.setAttribute("quantity",String.valueOf(dForm.getQuantity()));
newNode.setAttribute("sumMoney",String.valueOf(dForm.getsumMoney()));
newNode.setAttribute("residue",String.valueOf(dForm.getResidue()));
newNode.setAttribute("re",dForm.getRe());
newNode.setAttribute("id",String.valueOf(dForm.getId()));
newNode.setAttribute("enterDate","0000000000000a8b");
}
}
//保存操作结果
public void save(String OutputFile) throws IOException,
FileNotFoundException,JDOMException
{
FileWriter writer=new FileWriter(OutputFile,false);
XMLOutputter Outputter=new XMLOutputter();
Outputter.setEncoding("GBK");
Outputter.output(doc,writer);
writer.close();
}
}