gpt4 book ai didi

java - 像 xml schema java 一样对列表进行排序

转载 作者:行者123 更新时间:2023-12-02 05:17:21 25 4
gpt4 key购买 nike

我有一个像这样的 xml:

<?xml version="1.0" encoding="UTF-8"?>
<plane>
<part>
<desc>qwe</desc>
<qty>1</qty>
</part>
<part>
<desc>asd</desc>
<qty>1</qty>
<part>
<desc>asdfg</desc>
<qty>1</qty>
</part>
<part>
<desc>asdfg</desc>
<qty>4</qty>
</part>
</part>
<part>
<desc>zxc</desc>
<qty>2</qty>
</part>
<part>
<desc>AAAA</desc>
<qty>1</qty>
<part>
<desc>BBBB</desc>
<qty>1</qty>
<part>
<desc>CCCC</desc>
<qty>13</qty>
<part>
<desc>DDDD</desc>
<qty>12</qty>
<part>
<desc>EEEE</desc>
<qty>21</qty>
</part>
</part>
</part>
<part>
<desc>CCCC1111</desc>
<qty>13</qty>
<part>
<desc>DDDD1111</desc>
<qty>12</qty>
<part>
<desc>EEEE1111</desc>
<qty>21</qty>
</part>
</part>
</part>
</part>
<part>
<desc>G</desc>
<qty>1</qty>
<part>
<desc>H</desc>
<qty>13</qty>
<part>
<desc>I</desc>
<qty>12</qty>
</part>
</part>
</part>
</part>
</plane>

现在我想以“相同”的结构将其打印出来。我创建了一个方法,但输出与预期不同:运行。类

public class Run {

public static void itarate(List<Part> list){
for (int i = 0; i<list.size(); i++){
System.out.println(list.get(i).getDesc() + " x " + list.get(i).getQty());
if (list.get(i).getListParts() != null){
System.out.print(" -- ");
itarate(list.get(i).getListParts());

}
}
}


public static void main(String[] args) {



Converter converter = new XML_Converter();
Plane plane = converter.readFile();
//System.out.println(plane);
List<Part> parts = plane.getPlaneParts();


itarate(parts);

}

}

输出:

qwe x 2
AAAA x 1
BBBB x 1
CCCC x 13
DDDD x 12
EEEE x 21
CCCC1111 x 13
DDDD1111 x 12
EEEE1111 x 21
G x 1
H x 13
I x 12

但我实际上想要这样的东西:

qwe x 2
AAAA x 1
BBBB x 1
CCCC x 13
DDDD x 12
EEEE x 21
CCCC1111 x 13
DDDD1111 x 12
EEEE1111 x 21
G x 1
H x 13
I x 12

XML 到对象类:

public class XML_Converter{

private String filePath = "D:\\file.xml";
private File file = new File(filePath);

@Override
public Plane readFile() {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Plane.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Plane plane = (Plane) jaxbUnmarshaller.unmarshal(file);
return plane;
} catch (JAXBException e) {
System.out.println("Unable to load file. Try again.");
}
return new Plane();

}

飞机等级

@XmlRootElement
public class Plane {

private List<Part> planeParts = null;


@XmlElement(name="part")
public List<Part> getPlaneParts() {
return planeParts;
}

public void setPlaneParts(List<Part> planeParts) {
this.planeParts = planeParts;
}

@Override
public String toString() {
return "Plane [planeParts=" + planeParts + "]";
}


}

零件类

public class Part {

private String desc;
private int qty;

private List<Part> listParts = null;


@XmlElement(name="desc")
public String getDesc() {
return desc;
}

@XmlElement(name="part")
public List<Part> getListParts() {
return listParts;
}

@XmlElement(name="qty")
public int getQty() {
return qty;
}

public void setDesc(String desc) {
this.desc = desc;
}

public void setListParts(List<Part> listParts) {
this.listParts = listParts;
}

public void setQty(int qty) {
this.qty = qty;
}

@Override
public String toString() {
return "Part [desc=" + desc + ", qty=" + qty + ", listParts="
+ listParts + "]";
}


}

我怎样才能实现这一点(所以xml结构类似于代码输出)?提前致谢。

最佳答案

在变量(例如 r)中传递当前递归级别并相应地打印空格数

public static void itarate(List<Part> list,int r){
for (int i = 0; i<list.size(); i++){
for(int j=0;j<r;j++)
System.out.print(" ");
System.out.println(list.get(i).getDesc() + " x " + list.get(i).getQty());
if (list.get(i).getListParts() != null){
itarate(list.get(i).getListParts(),r+1);

}
}

编辑:将缩进内容移出内循环

关于java - 像 xml schema java 一样对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26815838/

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