[編輯]任何算法/ Java代碼示例travserse和構建樹(不是二進制)也將是有益的樹在Java中對Java的String XML(無節點類)
我想創建XML 。行和列大小爲從數據庫動態
(例如:在這種情況下,結構是國家 - >狀態 - > projectNumber 它也可以被國家 - >狀態 - >部 - > buildingNumber-> projectNumber。)
您可能會也可能不會使用我在TestMain類中編寫的方法。由於某些原因,我寧願不使用org.w3c.dom.Node類。但不是強制性的。如果你幫我使用w3c.dom.Node,我會盡量根據我的需要進行轉換。
xml應該看起來像這樣。
<root>
<value name="USA">
<value name="NY">
<value name="p1"></value>
<value name="p2"></value>
<value name="p3"></value>
<value name="p4"></value>
</value>
<value name="LA">
<value name="p6"></value>
<value name="p7"></value>
<value name="p8"></value>
</value>
...
...
</value>
</root>
package com;
public class TestMain {
public static void main(String[] args) {
String[][] dbResult= new String[10][3];
dbResult[0][0]="USA";dbResult[0][1]="NY";dbResult[0][2]="P1";
dbResult[1][0]="USA";dbResult[1][1]="NY";dbResult[1][2]="P2";
dbResult[2][0]="USA";dbResult[2][1]="NY";dbResult[2][2]="P3";
dbResult[3][0]="USA";dbResult[3][1]="NY";dbResult[3][2]="P4";
dbResult[4][0]="USA";dbResult[4][1]="LA";dbResult[4][2]="P5";
dbResult[5][0]="USA";dbResult[5][1]="LA";dbResult[5][2]="P6";
dbResult[6][0]="USA";dbResult[6][1]="LA";dbResult[6][2]="P7";
dbResult[7][0]="USA";dbResult[7][1]="OH";dbResult[7][2]="P8";
dbResult[8][0]="USA";dbResult[8][1]="OH";dbResult[8][2]="P9";
dbResult[9][0]="USA";dbResult[9][1]="TX";dbResult[9][2]="P10";
String xmlStr="<root name=\"myName\" style=\"Horizontal\"></root>";
TestMain.createXml(xmlStr,dbResult);
}
private static void createXml(String xmlStr,String[][] dbResult) {
int arrayItr =0;
System.out.println(dbResult.length);
while(arrayItr<dbResult.length){
String[] currRow=dbResult[arrayItr++];
int columnNumber=1;
for(String currValue:currRow){
if(arrayItr==1){
xmlStr = TestMain.insertChild(xmlStr, columnNumber, currValue);
}else{
/*if(TestMain.valueOfAttribute(xmlStr, "name").equalsIgnoreCase(currValue)){
continue;
}else{
}*/
for(int childNumber=1;childNumber<TestMain.getChildrenCount(xmlStr);childNumber++){
TestMain.getChildrenByNum(xmlStr,childNumber);
}
}
columnNumber++;
}
//System.out.println();
}
System.out.println(xmlStr);
}
private static int getChildrenCount(String xmlStr) {
char[] chars=xmlStr.toCharArray();
int counter=0;
for(int currItr=0;currItr<chars.length;currItr++){
char currChar=chars[currItr];
if(currChar=='<' && chars[currItr+1]!='/'){
counter++;
}
}
return counter-1;
}
private static Object getChildrenByNum(String xmlStr, int childNumber) {
// TODO Auto-generated method stub
return null;
}
public static String insertChild(String xmlStr, int position, String valueInsert){
System.out.println("Entered : insertChild "+xmlStr.length());
//xmlStr = xmlStr.substring(xmlStr.indexOf(">")+1,xmlStr.lastIndexOf("<"));
int index=0;
for(int counter=0;counter<position;counter++){
index= xmlStr.indexOf(">",(index+1));
//index=index+tempIndex+1;
//System.out.println(xmlStr);
}
//System.out.println("Index: "+index);
String op=xmlStr.substring(0,index+1) +
"<value name=\""+valueInsert+"\"></value>" +xmlStr.substring(index+1);
//System.out.println("output in insChild Method: "+op);
//xmlStr = insertChild(xmlStr,valueCompare,valueInsert);
return op;
}
public static int findPositionToInsert(String xmlStr, String valueCompare,int pos){
//System.out.println("Entered : findPosition");
if(TestMain.valueOfAttribute(xmlStr, "name").equalsIgnoreCase(valueCompare)){
return pos;
}else if(TestMain.hasChildren(xmlStr)){
pos++;
xmlStr = xmlStr.substring(xmlStr.indexOf(">")+1,xmlStr.lastIndexOf("<"));
pos=TestMain.findPositionToInsert(xmlStr, valueCompare,pos);
}else{
return -1;
}
return pos;
}
public static String valueOfAttribute(String xml,String attributeName){
String valueOfAttribute=null;
int index = xml.indexOf(attributeName);
char c=xml.charAt(index+attributeName.length());
//System.out.println("C- "+c);
int i=index+attributeName.length();//i<xml.indexOf(">");i++){
//if(c=='='){
String subStr=xml.substring(i+2,xml.length());
//System.out.println("Input Xml "+xml+" -SubStr "+subStr);
int secondIndex=subStr.indexOf("\"");
//System.out.println("sec index "+secondIndex);
String value=subStr.substring(0,secondIndex);
//}
return value;
//return valueOfAttribute;
}
public static boolean hasChildren(String xml){
int index = xml.indexOf(">");
if(xml.charAt(index-1)!='/'){
String[] splitStr = xml.split(">");
if(splitStr.length>1){
return true;
}
}
return false;
}
}
如果你在db中有大量的數據放入xml中,最好使用Stax代替。 – unludo 2012-03-13 14:18:45