返回信息流具体的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代码,不胜感激!!
这是一条镜像帖。来源:北邮人论坛 / java / #12707同步于 2009/12/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
编程实现txt与xml的转化【求助】
welcome2008
2009/12/20镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
不知道你原始文件是什么格式的
如果node和edge不在同一个文件里,或能很容易的分开,直接文本替换就ok的啊
比如node的转换
1.替换node为<node
2.替换[为空格
3.替换id为id=或者id="
4.替换]为 label=""></node> 或 " label=""></node>
5.删除换行符
6.找个xml编辑器格式化一下
。。。。。。
java的话也是每次读取四行,抽出第二行,空格分割取出id值,填入模板拼出xml
【 在 welcome2008 的大作中提到: 】
: 具体的txtgml文件很简单:定义了node和edge两个信息,如下: node
: [
: id 0
: ...................
xml是虾米东西[em16]
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();
}
}
牛,为什么我们总喜欢把问题复杂化
【 在 nonsense 的大作中提到: 】
: 不知道你原始文件是什么格式的
: 如果node和edge不在同一个文件里,或能很容易的分开,直接文本替换就ok的啊
: 比如node的转换
: ...................
【 在 nonsense 的大作中提到: 】
: 不知道你原始文件是什么格式的
: 如果node和edge不在同一个文件里,或能很容易的分开,直接文本替换就ok的啊
: 比如node的转换
: ...................
这样很简单,处理简单格式文档很好.但是稍微复杂的文档就可能有风险.
比如id的值为"node",那也就给一起转化了.
最稳妥的方法还是逐字符读取,碰到关键字符就进行递归调用的入栈出栈操作.但是比较麻烦.
赞
【 在 nonsense 的大作中提到: 】
: 不知道你原始文件是什么格式的
: 如果node和edge不在同一个文件里,或能很容易的分开,直接文本替换就ok的啊
: 比如node的转换
: ...................