BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #12707同步于 2009/12/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

编程实现txt与xml的转化【求助】

welcome2008
2009/12/20镜像同步8 回复
具体的txtgml文件很简单:定义了node和edge两个信息,如下: node [ id 0 ] node [ id 1 ] node [ id 2 ]。。。。有好多个id,都是这个格式的,想转化为xml中的 <node id="0" label=""></node> <node id="1" label=""></node> <node id="2" label=""></node>这个形式,本想手工在xml中添加每个节点,但节点数太多了 还有节点之间很多条边的信息,gml文件中格式是: edge [ source 1175 target 1170 ] 想转化为xml<edge label="" source="1175" target="1170"></edge> 总之就是数据量比较大,节点和边不可能手工写进xml,不知可行否,有哪个大牛能编写实现的java代码,不胜感激!!
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
Nonsense机器人#1 · 2009/12/20
不知道你原始文件是什么格式的 如果node和edge不在同一个文件里,或能很容易的分开,直接文本替换就ok的啊 比如node的转换 1.替换node为<node 2.替换[为空格 3.替换id为id=或者id=" 4.替换]为 label=""></node> 或 " label=""></node> 5.删除换行符 6.找个xml编辑器格式化一下 。。。。。。 java的话也是每次读取四行,抽出第二行,空格分割取出id值,填入模板拼出xml
jmpesp机器人#2 · 2009/12/20
【 在 welcome2008 的大作中提到: 】 : 具体的txtgml文件很简单:定义了node和edge两个信息,如下: node : [ : id 0 : ................... xml是虾米东西[em16]
flowind机器人#3 · 2009/12/20
javax.xml包可以直接生成和解析xml的,直接把id读出来就可以生成了吧。 写个例子,不保证能用。。 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = {"node"}) @XmlRootElement(name = "nodes") public class XmlFile { List<Node> node; public List<Node> getNodes() { if (node == null) { node = new ArrayList<Node>(); } return this.node; } } Node: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "node", propOrder = {"id","label" }) public class Node { protected String id; protected String label; public String getId() { return id; } public void setIdl(String id) { this.id = id; } public String getLabel(){ return label; } public void setLabel(String label) { this.label = label; } } 生成的时候: public void creatFile{ File f = new File(string..); XmlFile xmlFile = new XmlFile (); try { for (read txt) { Node n = new Node(); n.setId(id); n.setLabel(label); } xmlFile.getNodes().add(n); } JAXBContext context = JAXBContext .newInstance(XmlFile.class); Marshaller marshaller = context.createMarshaller(); if (!f.exists()) try { File parent = f.getParentFile(); parent.mkdirs(); f.createNewFile(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } marshaller.marshal(xmlFile, new FileOutputStream(f)); } catch (IOException e1) { e1.printStackTrace(); } catch (JAXBException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
javame机器人#4 · 2009/12/21
牛,为什么我们总喜欢把问题复杂化 【 在 nonsense 的大作中提到: 】 : 不知道你原始文件是什么格式的 : 如果node和edge不在同一个文件里,或能很容易的分开,直接文本替换就ok的啊 : 比如node的转换 : ...................
Adun机器人#5 · 2009/12/21
【 在 nonsense 的大作中提到: 】 : 不知道你原始文件是什么格式的 : 如果node和edge不在同一个文件里,或能很容易的分开,直接文本替换就ok的啊 : 比如node的转换 : ................... 这样很简单,处理简单格式文档很好.但是稍微复杂的文档就可能有风险. 比如id的值为"node",那也就给一起转化了. 最稳妥的方法还是逐字符读取,碰到关键字符就进行递归调用的入栈出栈操作.但是比较麻烦.
greedisgood机器人#6 · 2009/12/21
dom4j
wks机器人#7 · 2009/12/21
赞 【 在 nonsense 的大作中提到: 】 : 不知道你原始文件是什么格式的 : 如果node和edge不在同一个文件里,或能很容易的分开,直接文本替换就ok的啊 : 比如node的转换 : ...................
forever216机器人#8 · 2009/12/21
太虎了 赞