问题背景:我使用PownerDesigner设计好物理模型生成PDM文件,用文本编辑器打开发现它是XML格式的,由于特殊原因,我要批量修改PDM里的东西,貌似可以通过写脚本在PownerDesigner里实现修改,只是我对这些脚本不熟悉,而我对java解析XML有一定的了解。于是我写了一些java程序读取该xml文件,发现读取生成后的xml文件跟之前读取的原始文件不是很一样,目前至少发现原始文件里的换行符号被替换成空格符号,导致生成后的xml文件,不被PownerDesigner程序识别。
问题简述:有个xml文件为:“a.xml”, 我通过 dom4j读取该文件,生成“b.xml”. 如何使a.xml和b.xml的内容基本完全一样?这个”基本完全一样“是指“a.xml”和“b.xml”只包含我修改的极个别字符,其余完全一样,包括特殊符号也一样。
问题样例代码: public static void main(String[] args) throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("E:/UAP/src.xml"));
/**
 * 开始写我需要修改的xml元素内容代码
 * .............
 */

//将修改后的xml内容保存到另外一个xml里面
OutputFormat format = OutputFormat.createPrettyPrint(); 
format.setEncoding("GBK");    // 指定XML编码  
XMLWriter writer = new XMLWriter(new FileWriter("E:/UAP/output.xml"),format); 
writer.write(document);
writer.close();
}执行代码后:
“src.xml”文件内容为:<?xml version="1.0" encoding="GBK"?>
<p>
1
1
1
1
1
1
1
1
1
1
1
1
</p>输出的“output.xml”文件内容为:<?xml version="1.0" encoding="GBK"?><p>1 1 1 1 1 1 1 1 1 1 1 1</p>从上述可以看出,"output.xml"并没有将"src.xml"里的内容完全一模一样得读取过来,至少是将换行符号替换成了空格符号.
哪位大虾能帮小弟解惑,小弟不甚感激.javaXML

解决方案 »

  1.   


    OutputFormat format = OutputFormat.createPrettyPrint(); 是不是这个漂亮的格式化惹的祸啊?
      

  2.   

    此方法不是很好,您可以尝试打开一个PDM文件,发现它里面的xml节点信息很复杂,而我做的修改工作,并不是简单得替换某个节点的值,而是需要根据其余的节点来进行逻辑判断后再修改,严格意义上来讲,我需要对原始的PDM文件进行边读取边修改,最后保存在另外一个文件中的,就像我举出的代码例子那样的格式操作的。
      

  3.   

    对了,你有没有尝试转换一下编码?比如,不用GBK,而用UTF-8或者iso8859-1?很多换行格式都是编码造成的
      

  4.   

    尝试了,不行呀,再说,我的原始xml文件里有汉字的,如果不设置编码,汉字出来是乱码。
      

  5.   

    你可以sax解析,读到一个标签,callback一个方法业务处理,然后继续读下面的!
      

  6.   

    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setTrimText(false);