dom4j解析XML问题

Yapiss 2013-04-17 11:48:46
问题背景:我使用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"里的内容完全一模一样得读取过来,至少是将换行符号替换成了空格符号.
哪位大虾能帮小弟解惑,小弟不甚感激.
...全文
123 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxiaofei 2013-04-17
  • 打赏
  • 举报
回复
对了,你有没有尝试转换一下编码?比如,不用GBK,而用UTF-8或者iso8859-1?很多换行格式都是编码造成的
Yapiss 2013-04-17
  • 打赏
  • 举报
回复
希望本帖别石沉大海
Yapiss 2013-04-17
  • 打赏
  • 举报
回复
引用 2 楼 fei1710 的回复:
Java code?1OutputFormat format = OutputFormat.createPrettyPrint(); 是不是这个漂亮的格式化惹的祸啊?
如何是的话,该如何修正呢?
Yapiss 2013-04-17
  • 打赏
  • 举报
回复
引用 1 楼 huangxiaofei 的回复:
最直观能想到的办法就是,用遍历的办法遍历每个节点,然后手动写入到文件
此方法不是很好,您可以尝试打开一个PDM文件,发现它里面的xml节点信息很复杂,而我做的修改工作,并不是简单得替换某个节点的值,而是需要根据其余的节点来进行逻辑判断后再修改,严格意义上来讲,我需要对原始的PDM文件进行边读取边修改,最后保存在另外一个文件中的,就像我举出的代码例子那样的格式操作的。
fei1710 2013-04-17
  • 打赏
  • 举报
回复

OutputFormat format = OutputFormat.createPrettyPrint(); 
是不是这个漂亮的格式化惹的祸啊?
huangxiaofei 2013-04-17
  • 打赏
  • 举报
回复
最直观能想到的办法就是,用遍历的办法遍历每个节点,然后手动写入到文件
Yapiss 2013-04-17
  • 打赏
  • 举报
回复
引用 10 楼 lvzg_005 的回复:
OutputFormat format = OutputFormat.createPrettyPrint(); format.setTrimText(false);
我了个擦,就是设置一个这个属性就好了啊,哎... 谢谢你,问题解决了.
lvzg_005 2013-04-17
  • 打赏
  • 举报
回复
OutputFormat format = OutputFormat.createPrettyPrint(); format.setTrimText(false);
Yapiss 2013-04-17
  • 打赏
  • 举报
回复
引用 8 楼 xianwangkai 的回复:
你可以sax解析,读到一个标签,callback一个方法业务处理,然后继续读下面的!
能举个简单的例子吗?谢谢拉~~~
xianwangkai 2013-04-17
  • 打赏
  • 举报
回复
你可以sax解析,读到一个标签,callback一个方法业务处理,然后继续读下面的!
Yapiss 2013-04-17
  • 打赏
  • 举报
回复
引用 6 楼 huangxiaofei 的回复:
对了,你有没有尝试转换一下编码?比如,不用GBK,而用UTF-8或者iso8859-1?很多换行格式都是编码造成的
尝试了,不行呀,再说,我的原始xml文件里有汉字的,如果不设置编码,汉字出来是乱码。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧