java读写xml的问题
我用javax.xml等等java自带的包去读写xml,读出来都没什么问题。可是写就有问题了
本来我的xml文件是
<IIsWebServer Location ="/LM/W3SVC/1"
AppPoolId="DefaultAppPool"
DefaultDoc="Default.htm,Default.asp,index.htm,iisstart.htm"
ServerBindings=":80:
192.168.0.1"
ServerComment="Default Web Site"
ServerSize="1"
>
</IIsWebServer>
结果在写到文件里面都成了
<IIsWebServer AppPoolId="DefaultAppPool" Location "/LM/W3SVC/1"DefaultDoc="Default.htm,Default.asp,index.htm,iisstart.htm"
ServerBindings=":80:" ServerComment="Default Web Site" ServerSize="1"
>
</IIsWebServer>
该换行的都不换行了,而且属性的位置也不一致了(这个倒无所谓),主要是
ServerBindings=":80:
192.168.0.1"
这样的数据,没有换行我的iis服务就不认识了。不知道怎么才能让""里面的内容换行呢?
------解决方案-------------------- // 以下设置输出的自动换行和缩进
transformer .setOutputProperty(OutputKeys.INDENT, "yes");
------解决方案-------------------- try
{
String context="";
String str="";
File file=new File("f:\\job.txt");// 文件名你自己设
FileReader fReader=new FileReader(file);
BufferedReader bReader=new BufferedReader(fReader);
while((str=bReader.readLine())!=null)
{
context=context+str+"\r\n";
}
bReader.close();
fReader.close();
File file1=new File("f:\\jobCopy.txt"); //新写成的文件名你自己设
FileWriter fWriter=new FileWriter(file1);
BufferedWriter bWriter=new BufferedWriter(fWriter);
bWriter.write(context);
bWriter.close();
fWriter.close();
}
catch(
IOException e)
{
System.out.println("IO Failed!");
}
------解决方案--------------------建议用dom4j去读写xml文件
------解决方案--------------------用JDOM
SAXBuilder builder = new SAXBuilder();
Document Doc = builder.build("D://temp/10.xml");
XMLOutputter XMLOut = new XMLOutputter();
String ss = XMLOut.outputString(Doc);
public static String createFile(String ss){
String strUrl = null;
try{
File f = new File("D:\temp");
File file = File.createTempFile("temp", ".xml", f);
if(file.exists()){
strUrl =file.getCanonicalPath();
}
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(ss);
writer.close();
}catch(IOException e){
e.printStackTrace();
}
return strUrl;
}
------解决方案--------------------可以用xsl进行设置格式
------解决方案--------------------换种思路,可否对
ServerBindings=":80:
192.168.0.1"
进行一下处理
------解决方案--------------------换种思路,可否对
ServerBindings=":80:
192.168.0.1"
进行一下处理
------解决方案--------------------Java code
package dom4j;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.dom4j.*;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class ReadXml {
/**
* @param args
*/
XMLWriter output = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
ReadXml rx = new ReadXml();
SAXReader reader = new SAXReader();
Document doc = null;
try {
doc= reader.read("test.xml");
Element root = doc.getRootElement();
rx.addXml(root);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void addXml(Element elementroot){
Document document = DocumentHelper.createDocument();
XMLWriter writer = null;
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
format.setExpandEmptyElements(true);
try {
Element root = document.addElement(elementroot.getName());
Iterator iter = elementroot.attributeIterator();
while(iter.hasNext()){
Attribute attr = (Attribute) iter.next();
StringBuffer val = new StringBuffer(attr.getValue());
int blank = val.indexOf(" ");
if(blank!=-1)
{
String result = val.substring(0, blank) + "\n" + val.substring(blank, val.length());
root.addAttribute("\n"+attr.getName(),result);
}
else
root.addAttribute("\n"+attr.getName(),attr.getValue());
}
writer = new XMLWriter(new FileWriter( "outfile.xml" ),format);
writer.write( document );
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}