gpt4 book ai didi

java - Java 中的 String xml 中的树(没有 Node 类)

转载 作者:行者123 更新时间:2023-12-02 07:55:39 25 4
gpt4 key购买 nike

[编辑]任何用于遍历和构造树(不是二进制)的算法/java代码示例也会有所帮助

我正在尝试创建 xml。行和列的大小是动态的,来自数据库

(例如:在本例中,结构为国家->州->项目编号。也可以是国家->州->部门->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;
}

}

最佳答案

也许您应该使用 JAXB 库来做到这一点:

请参阅此处的示例:http://jaxb.java.net/tutorial/section_1_3-Hello-World.html#Hello%20World

问候

米夏

关于java - Java 中的 String xml 中的树(没有 Node 类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9684389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com