我有一个List里面是保存的是一个KrSysModule对象, 现在想根据List内容生成一个xml字符串。写了几遍,没有写出来,望大侠赐教。。
KrSysModule对象字段:
private String node ;
private String name;
private String parentNode; 数据格式
-----------------------------
node name parentNode
0 根节点
0001 节点1 0
0001001 节点11 0001
0002 节点2 0
我想上面个数输出数据格式为String,格式为:
<XML>
<node name='根节点'>
<node name='节点1>
<node name='节点11'>
</node>
</node>
<node name='节点2'>
</node>
</node></XML>当然节点的子节点没有限制。。
KrSysModule对象字段:
private String node ;
private String name;
private String parentNode; 数据格式
-----------------------------
node name parentNode
0 根节点
0001 节点1 0
0001001 节点11 0001
0002 节点2 0
我想上面个数输出数据格式为String,格式为:
<XML>
<node name='根节点'>
<node name='节点1>
<node name='节点11'>
</node>
</node>
<node name='节点2'>
</node>
</node></XML>当然节点的子节点没有限制。。
解决方案 »
- 为什么我编写一个JTree的程序,实现点击添加树节点,但是我的只能添加一次,不知为何???
- 多线程问题
- the method setOnKeyListener in the type View is not a applicable for the argumen
- 子类 父类
- 请教个图形的算法??
- 请教两个问题,帮顶也有分.:)
- 请问一个NIO的问题?
- RMI的实现?谢谢各位!
- 常见问题解答: Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
- 高手,如何在JBuilder6下,创建Hello,Java!工程,有*.jpx,*.java等等文件,麻烦具体点,菜鸟希望高手能伸出援助之手!
- java IO流的疑问
- [Java高手来翻译下]Java语言规范JLS 6.6.2 翻译
堆栈啊,写一个头部system.out.println("<" + element.getName() + ">");
stack.push(Element)
继续写子项,可以调用本身方法(递归)
Element = stack.pop();
system.out.println("</" + element + ">">
class KrSysModule{
String no;
String name;
KrSysModule parent;
List<KrSysModule> children;
}
节点类。import java.util.ArrayList;
import java.util.List;
public class Node {
private String id;
private String name;
private Node parentNode;
List childList = new ArrayList(); public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Node getParentNode() {
return parentNode;
} public void setParentNode(Node parentNode) {
this.parentNode = parentNode;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
}
public void addChild(Node child){
child.setParentNode(this);
childList.add(child);
}
public List getChildList(){
return childList;
}
}
实现类:import java.util.Iterator;
import java.util.List;public class Client { /**
* @param args
*/
public static void main(String[] args) {
Node root = new Node();
root.setId("root");
root.setName("根节点");
root.setParentNode(null);
for(int i=0;i<10;i++){
Node node = new Node();
node.setId("0");
node.setName("node "+i);
root.addChild(node);
for(int j=0;j<10;j++){
Node node0 = new Node();
node0.setId(""+i+j);
node0.setName("node "+i+j);
node0.setParentNode(node);
node.addChild(node0);
}
}
//输出生成XML文档。
System.out.println("<XML>");
print(root);
System.out.println("</XML>");
}
public static void print(Node node){
System.out.println("<node name="+node.getName()+">");
List child = node.getChildList();
if(!child.isEmpty()){
Iterator it = child.iterator();
while(it.hasNext()){
print((Node)it.next());
}
}
System.out.println("</node>");
}
}结果:
<XML>
<node name=根节点>
<node name=node 0>
<node name=node 00>
</node>
<node name=node 01>
</node>
<node name=node 02>
</node>
<node name=node 03>
</node>
<node name=node 04>
</node>
<node name=node 05>
</node>
<node name=node 06>
</node>
<node name=node 07>
</node>
<node name=node 08>
</node>
<node name=node 09>
</node>
</node>
<node name=node 1>
<node name=node 10>
</node>
<node name=node 11>
</node>
<node name=node 12>
</node>
<node name=node 13>
</node>
<node name=node 14>
</node>
<node name=node 15>
</node>
<node name=node 16>
</node>
<node name=node 17>
</node>
<node name=node 18>
</node>
<node name=node 19>
</node>
</node>
<node name=node 2>
<node name=node 20>
</node>
<node name=node 21>
</node>
<node name=node 22>
</node>
<node name=node 23>
</node>
<node name=node 24>
</node>
<node name=node 25>
</node>
<node name=node 26>
</node>
<node name=node 27>
</node>
<node name=node 28>
</node>
<node name=node 29>
</node>
</node>
<node name=node 3>
<node name=node 30>
</node>
<node name=node 31>
</node>
<node name=node 32>
</node>
<node name=node 33>
</node>
<node name=node 34>
</node>
<node name=node 35>
</node>
<node name=node 36>
</node>
<node name=node 37>
</node>
<node name=node 38>
</node>
<node name=node 39>
</node>
</node>
<node name=node 4>
<node name=node 40>
</node>
<node name=node 41>
</node>
<node name=node 42>
</node>
<node name=node 43>
</node>
<node name=node 44>
</node>
<node name=node 45>
</node>
<node name=node 46>
</node>
<node name=node 47>
</node>
<node name=node 48>
</node>
<node name=node 49>
</node>
</node>
<node name=node 5>
<node name=node 50>
</node>
<node name=node 51>
</node>
<node name=node 52>
</node>
<node name=node 53>
</node>
<node name=node 54>
</node>
<node name=node 55>
</node>
<node name=node 56>
</node>
<node name=node 57>
</node>
<node name=node 58>
</node>
<node name=node 59>
</node>
</node>
<node name=node 6>
<node name=node 60>
</node>
<node name=node 61>
</node>
<node name=node 62>
</node>
<node name=node 63>
</node>
<node name=node 64>
</node>
<node name=node 65>
</node>
<node name=node 66>
</node>
<node name=node 67>
</node>
<node name=node 68>
</node>
<node name=node 69>
</node>
</node>
<node name=node 7>
<node name=node 70>
</node>
<node name=node 71>
</node>
<node name=node 72>
</node>
<node name=node 73>
</node>
<node name=node 74>
</node>
<node name=node 75>
</node>
<node name=node 76>
</node>
<node name=node 77>
</node>
<node name=node 78>
</node>
<node name=node 79>
</node>
</node>
<node name=node 8>
<node name=node 80>
</node>
<node name=node 81>
</node>
<node name=node 82>
</node>
<node name=node 83>
</node>
<node name=node 84>
</node>
<node name=node 85>
</node>
<node name=node 86>
</node>
<node name=node 87>
</node>
<node name=node 88>
</node>
<node name=node 89>
</node>
</node>
<node name=node 9>
<node name=node 90>
</node>
<node name=node 91>
</node>
<node name=node 92>
</node>
<node name=node 93>
</node>
<node name=node 94>
</node>
<node name=node 95>
</node>
<node name=node 96>
</node>
<node name=node 97>
</node>
<node name=node 98>
</node>
<node name=node 99>
</node>
</node>
</node>
</XML>
import java.util.HashMap;
import java.util.List;public class ConvertPlaneToTree {
public static void main(String[] args){
ArrayList<KrSysModule> moduleList = new ArrayList<KrSysModule>();
moduleList.add(new KrSysModule("0","根节点",null));
moduleList.add(new KrSysModule("0001","节点1","0"));
moduleList.add(new KrSysModule("0001001"," 节点11","0001"));
moduleList.add(new KrSysModule("0002","节点2","0"));
HashMap<String,Node> idNodeMap = new HashMap<String,Node>();
int size = moduleList.size();
for(int i=0;i<size;i++){
KrSysModule tempModule = moduleList.get(i);
Node tempNode = new Node(tempModule.getName());
idNodeMap.put(tempModule.getNode(), tempNode);
}
Node root = null;
for(int i=0;i<size;i++){
KrSysModule tempModule = moduleList.get(i);
String parentName = tempModule.getParentNode();
if(parentName != null){
Node parentNode = idNodeMap.get(parentName);
String curName = tempModule.getNode();
Node curNode = idNodeMap.get(curName);
parentNode.childNodes.add(curNode);
curNode.parentNode = parentNode;
}else{
String curName = tempModule.getNode();
root = idNodeMap.get(curName);
}
}
System.out.println(iterateNode(root,1));
}
StringBuilder builder = new StringBuilder();
int spaceNum = level*4;
for(int i=1;i<=spaceNum;i++){
builder.append(' ');
}
builder.append("<node name=\""+parent.name+"\">\n");
List<Node> childList = parent.childNodes;
int childSize = childList.size();
for(int i=0;i<childSize;i++){
Node childNode = childList.get(i);
builder.append(iterateNode(childNode,level+1));
}
builder.append("\n");
for(int i=1;i<=spaceNum;i++){
builder.append(' ');
}
builder.append("</node>\n");
return builder.toString();
}
}
class KrSysModule{
private String node ;
private String name;
private String parentNode;
public KrSysModule(String node,String name,String parentNode){
this.node = node;
this.name = name;
this.parentNode = parentNode;
}
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParentNode() {
return parentNode;
}
public void setParentNode(String parentNode) {
this.parentNode = parentNode;
}
}
class Node{
Node parentNode;
List<Node> childNodes = new ArrayList<Node>();
String name;
public Node(String name){
this.name = name;
}
public void addChild(Node childNode){
childNodes.add(childNode);
}
}
private int level = 0;
public int getLevel() {
return level;
} public void setLevel(int level) {
this.level = level;
}
/**
* 递归生成树算法
* @param list :查询出来的结果集
* @param father:父节点
* @param arraryList 新的结果集
*/
public void buildTree(List list, String father,ArrayList arraryList) {
for (int i = 0; i < list.size(); i++) {
HashMap map = (HashMap) list.get(i);
String Type_Parent_Id = (String) map.get("parentId");
String Type_Id = (String) map.get("id");
if (Type_Parent_Id.equals(father)) {
map.put("level", level);
arraryList.add((HashMap) list.get(i));
level++;
buildTree(list, Type_Id,arraryList);
}
}
level--;
}
数据库加一个level 字段,用来orderby
调用:
int level = 0;
Category cat = new Category();
ArrayList arraryList = new ArrayList();
List list = db.getCatList(conn,sql);
cat.setLevel(level);
cat.buildTree(list, "0",arraryList);
第一步:下载JDOM包。下载地址:http://www.jdom.org/dist/binary/ 下载的是jdom-1.1.1.zip第二步:解压后,把jdom/build下的jdom.jar和jdom/lib/jaxen.jar拷贝到你Eclipse项目中的libs下,并且加入到Build Path中。这个就不用我多说了吧。第三步:KrSysModule的Bean。这个应该你有。public class KrSysModule {
private String node ;
private String name;
private String parentNode;
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParentNode() {
return parentNode;
}
public void setParentNode(String parentNode) {
this.parentNode = parentNode;
}
}
第四步:生成XML文件。这里我默认生成到C盘根本下了,叫aa.xml。你可以自己更改。import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;public class ListToXML { //对外方法
public void list2xml(List<KrSysModule> list) throws Exception, IOException {
if(list != null) {
//第一步,进行List排序,用来保证要创建的节点的父节点事先已经创建了。(比较关键)
this.sortKrSysModules(list);
//第二步,根据list生成XML
Document doc = this.buildXMLByList(list);
//写出文件
XMLOutputter XMLOut = new XMLOutputter();
XMLOut.output(doc, new FileOutputStream("c:/aa.xml"));
}
}
//进行排序
private void sortKrSysModules(List<KrSysModule> list) {
if(list != null) {
Collections.sort(list, new Comparator() {
public int compare(Object o1,Object o2) {
KrSysModule kr1=(KrSysModule)o1;
KrSysModule kr2=(KrSysModule)o2;
return kr1.getParentNode().compareTo(kr2.getParentNode());
}
});
}
}
//通过List构建Document
private Document buildXMLByList(List<KrSysModule> list) throws JDOMException {
Element xml = new Element("xml");
Document doc = new Document(xml);
if(list != null) {
for(KrSysModule m : list) {
if(m.getParentNode().length()>0) {//有父节点
Element pNode = (Element) XPath.selectSingleNode(doc, "//node[@id='"+m.getParentNode()+"']");
if(pNode != null) {
Element sNode = new Element("node");
sNode.setAttribute("id", m.getNode());
sNode.setAttribute("name", m.getName());
pNode.addContent(sNode);
}
}else {//根节点
Element root = new Element("node");
root.setAttribute("id", m.getNode());
root.setAttribute("name", m.getName());
xml.addContent(root);
}
}
}
return doc;
}
//测试主方法
public static void main(String[] args) {
//生成测试数据
KrSysModule module0 = new KrSysModule();
module0.setNode("0");
module0.setName("根节点");
module0.setParentNode("");
KrSysModule module1 = new KrSysModule();
module1.setNode("0001");
module1.setName("节点1");
module1.setParentNode("0");
KrSysModule module2 = new KrSysModule();
module2.setNode("0001001");
module2.setName("节点11");
module2.setParentNode("0001");
KrSysModule module3 = new KrSysModule();
module3.setNode("0002");
module3.setName("节点2");
module3.setParentNode("0");
List<KrSysModule> list = new ArrayList<KrSysModule>();
list.add(module0);
list.add(module1);
list.add(module2);
list.add(module3);
//生成xml
ListToXML listToXml = new ListToXML();
try {
System.out.println("开始生成文件");
listToXml.list2xml(list);
System.out.println("生成文件完成");
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;public class ListToXML { //对外方法
public String list2xml(List<KrSysModule> list) throws Exception, IOException {
String xml = "";
if(list != null) {
//第一步,进行List排序,用来保证要创建的节点的父节点事先已经创建了。(比较关键)
this.sortKrSysModules(list);
//第二步,根据list生成XML
Document doc = this.buildXMLByList(list);
//第三步,生成字符串
xml = this.buildXMLString(doc);
}
return xml;
}
//生成字符串
private String buildXMLString(Document doc) throws IOException {
if(doc != null) {
Format format = Format.getPrettyFormat();
java.util.Properties sysProp = new java.util.Properties(System.getProperties());
String sysFileEncoding = sysProp.getProperty("file.encoding");//得到操作系统的编码
format.setEncoding(sysFileEncoding);//设置编码格式
XMLOutputter xmlout = new XMLOutputter(format);
ByteArrayOutputStream out = new ByteArrayOutputStream();
String xmlStr = null;
xmlout.output(doc,out);
xmlStr = out.toString();//将xml内容转化为字符串
return xmlStr;
}
return "";
}
//进行排序
private void sortKrSysModules(List<KrSysModule> list) {
if(list != null) {
Collections.sort(list, new Comparator() {
public int compare(Object o1,Object o2) {
KrSysModule kr1=(KrSysModule)o1;
KrSysModule kr2=(KrSysModule)o2;
return kr1.getParentNode().compareTo(kr2.getParentNode());
}
});
}
}
//通过List构建Document
private Document buildXMLByList(List<KrSysModule> list) throws JDOMException {
Element xml = new Element("xml");
Document doc = new Document(xml);
if(list != null) {
for(KrSysModule m : list) {
if(m.getParentNode().length()>0) {//有父节点
Element pNode = (Element) XPath.selectSingleNode(doc, "//node[@id='"+m.getParentNode()+"']");
if(pNode != null) {
Element sNode = new Element("node");
sNode.setAttribute("id", m.getNode());
sNode.setAttribute("name", m.getName());
pNode.addContent(sNode);
}
}else {//根节点
Element root = new Element("node");
root.setAttribute("id", m.getNode());
root.setAttribute("name", m.getName());
xml.addContent(root);
}
}
}
return doc;
}
//测试主方法
public static void main(String[] args) {
//生成测试数据
KrSysModule module0 = new KrSysModule();
module0.setNode("0");
module0.setName("根节点");
module0.setParentNode("");
KrSysModule module1 = new KrSysModule();
module1.setNode("0001");
module1.setName("节点1");
module1.setParentNode("0");
KrSysModule module2 = new KrSysModule();
module2.setNode("0001001");
module2.setName("节点11");
module2.setParentNode("0001");
KrSysModule module3 = new KrSysModule();
module3.setNode("0002");
module3.setName("节点2");
module3.setParentNode("0");
List<KrSysModule> list = new ArrayList<KrSysModule>();
list.add(module0);
list.add(module1);
list.add(module2);
list.add(module3);
//生成xml
ListToXML listToXml = new ListToXML();
try {
System.out.println(listToXml.list2xml(list));;
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出如下:<?xml version="1.0" encoding="UTF-8"?>
<xml>
<node id="0" name="根节点">
<node id="0001" name="节点1">
<node id="0001001" name="节点11" />
</node>
<node id="0002" name="节点2" />
</node>
</xml>
this.sortKrSysModules(list);
public String getTree(String condition) {
String result = "<XML>";
List data = this.query(condition, "0");
for (int i = 0; i < data.size(); i++) {
KrSpDataDictionary krSpDataDictionary = (KrSpDataDictionary) data
.get(i); String _regexp = "(.*?)(<node id='" + krSpDataDictionary.getParentNode()
+ ".*?>)(.*?)(</" + krSpDataDictionary.getParentNode()
+ "node>)(.*?)"; String nodes = "<node id='" + krSpDataDictionary.getNode()
+ "' name='" + krSpDataDictionary.getName() + "'></"
+ krSpDataDictionary.getNode() + "node>"; Pattern p = Pattern.compile(_regexp);
Matcher m = p.matcher(result);
boolean b = m.matches(); if (b) {
result = result.replaceAll(_regexp, "$1$2$3"+nodes+"$4$5");
} else {
result += nodes;
} }
result += "</XML>";
result = result.replaceAll("</.*?node>", "</node>");
return result;
}
左边儿子,右边兄弟的。
先生成一个树,
然后通过递归来生成XML文件。
否则光是LIST的遍历就够呛
当俺米说吧