按xml模式java中的顺序排列列表
我有这样一个xml:按xml模式java中的顺序排列列表,java,xml,list,arraylist,Java,Xml,List,Arraylist,我有这样一个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
<?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>
但实际上我想要的是:
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 + "]";
}
}
@XmlRootElement
公务舱飞机{
私有列表planeParts=null;
@xmlement(name=“part”)
公共列表getPlaneParts(){
返回平面零件;
}
公共无效设置平面零件(列出平面零件){
此参数。平面零件=平面零件;
}
@凌驾
公共字符串toString(){
返回“平面[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 + "]";
}
}
公共类部分{
私有字符串描述;
私人整数数量;
私有列表listParts=null;
@xmlement(name=“desc”)
公共字符串getDesc(){
返回描述;
}
@xmlement(name=“part”)
公共列表getListParts(){
返回列表部件;
}
@xmlement(name=“数量”)
public int getQty(){
退货数量;
}
公共void setDesc(字符串desc){
this.desc=desc;
}
公共作废setListParts(列表listParts){
this.listParts=listParts;
}
公共作废设置数量(整数数量){
该数量=数量;
}
@凌驾
公共字符串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);
}
}
公共静态无效率(列表,int r){
对于(inti=0;iInclude complete code.include,如您所愿),我认为有一种方法可以在不使用递归的情况下实现这一点,但这需要更改您的XML结构。此外,我认为我可以识别这个“平面”XML结构。如果你正在做我认为你正在做的事情,那就太好了!嗯,设置为0会使循环只运行一次。设置为1会产生很多重复的内容…目前手头没有javac。将缩进内容移出循环。基本思想是你必须修改缩进b基于递归深度。您没有这样做。顺便说一句。我假设设置r=0将使循环永远不会迭代。
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 + "]";
}
}
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);
}
}